我试图编写一个ruby脚本:
我在第1步和第2步中取得了成功,但看起来启动的脚本(即子进程)在ruby代码完成后终止。
这是我能想到的最后一个版本(超简化):
pid = fork do
exec "/my/fancy/daemon/style/script"
end
File.open('tmp/process.pid', 'w') { |file| file.write(pid.to_s) }
你能告诉我我做错了什么吗?最终目标是在ruby代码退出后保持另一个脚本(即子进程)运行。
答案 0 :(得分:3)
您可以“分离”您的子进程:
Process.detach(pid)
有关详细信息,请参阅Process#detach。
如果您在shell上运行脚本,并且您的脚本是最后一个交互式进程,则您的虚拟终端可能会退出并导致您的子进程也挂起。如果您考虑不将输出发送到终端,则可以在运行exec之前使用Process.daemon。
请参阅Process#daemon。