我使用rails-api gem来构建api。我试图在控制器中使用ruby的Process lib来摆弄像这样的媒体播放器。
def playNext
Process.exec('musique --next')
end
但是一旦命令执行rails服务器退出。我可能会做一个完全愚蠢的事情。
出了什么问题?我正在使用的方法(可能是愚蠢的)有什么问题吗?
答案 0 :(得分:1)
Process::exec
replaces the current process with the spawned process。一旦生成的进程退出,就不再有父进程恢复运行。
相反,请使用Process::spawn
。
演示:
puts "About to spawn"
Process.spawn("ls -l | wc -l")
puts "Finished listing via spawn"
puts "About to exec"
exec("ls -l | wc -l")
puts "Finished listing via exec"
输出:
About to spawn
Finished listing via spawn
About to exec
777
777
永远不会调用最终的puts
,因为exec
有效地终止了Ruby进程并将其替换为子进程。