在ruby脚本退出后启动进程并使其保持运行

时间:2014-07-26 20:49:51

标签: ruby linux process fork

我试图编写一个ruby脚本:

  1. 运行命令/脚本
  2. 将命令的进程pid存储在一个文件中,以便我可以检查它是否仍在运行,并且
  3. 该命令应在ruby代码退出后继续运行。
  4. 我在第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代码退出后保持另一个脚本(即子进程)运行。

1 个答案:

答案 0 :(得分:3)

您可以“分离”您的子进程:

Process.detach(pid)

有关详细信息,请参阅Process#detach

如果您在shell上运行脚本,并且您的脚本是最后一个交互式进程,则您的虚拟终端可能会退出并导致您的子进程也挂起。如果您考虑不将输出发送到终端,则可以在运行exec之前使用Process.daemon。

请参阅Process#daemon