【发布时间】:2017-04-21 22:42:39
【问题描述】:
我有一个包含 IO.popen 调用的 Ruby 脚本。我可以使用 CTRL+C 取消 popen 调用(我使用 Signal.trap("SIGINT"),然后导致我调用 kill -2 #{popen_pid})。这很好用,当我按下 CTRL+C 时,kill -2 会导致 popen 进程在结束之前运行一些清理。
我的问题:当 popen 过程花费太长时间时,我也希望能够有同样的行为。但是,我无法模拟 CTRL+C 行为。在 ruby 脚本的 pid 上使用 Process.kill 最终只会结束所有事情而没有进行清理,并且在 popen 进程上运行 Process.kill 什么也不做。我尝试使用反引号直接访问 shell,在 ruby 脚本的 pid 和 popen pid 上调用 kill -2,但这些也不做任何事情。
有人有什么建议吗?
【问题讨论】: