【问题标题】:Terminating a ruby fork does not terminate the underlying process终止 ruby​​ fork 不会终止底层进程
【发布时间】:2016-12-09 15:49:57
【问题描述】:

我正在调试一段看起来像这样的代码:

    pid = fork do
      STDERR.reopen("/dev/null")
      STDOUT.reopen("/dev/null")
      exec('some bash command that runs in the foreground')
    end

    at_exit do
      Process.kill("TERM", pid)
      Process.wait pid
    end

问题是Process.kill 会杀死fork,但不会杀死用exec 启动的进程。

如何杀死 fork 和 exec 进程?

【问题讨论】:

  • fork 进程与execed 进程相同(它们具有相同的 pid),您不能只杀死其中一个。您的 bash 命令是否启动了其他进程?
  • 是的,在我的情况下,bash 命令在前台启动 solr
  • 尝试将 exec 命令更改为睡眠之类的命令,可能您的 bash 命令忽略了一些信号。

标签: ruby


【解决方案1】:

您正在向可能阻塞 TERM 的进程发送 TERM 信号。如果您将其替换为“睡眠”之类的简单内容,您将看到它可以被终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多