在Ruby中使用进程ID杀死进程

4

我在尝试在给定时间后使用进程PID来杀死进程,例如,如果进程持续运行超过10分钟,我必须调用一个方法来杀死它。

我有两个问题:首先,我无法成功杀死进程,我正在使用:

Process.kill('INT', pid)

但是当我使用 QUIT 信号而不是 INT 信号时,会出现像 Bad file descriptorunsupported name 'SIGQUIT' 这样的错误。
其次,我怎样在调用方法杀死进程之前设置一个10分钟的计时器?
谢谢。

可能使用 Process.kill 'SIGKILL', pid 代替(INT 是用于发送 ctrl+c 的,我不知道它的实现是否有效... https://github.com/ruby/ruby/blob/cc934fc31c221225584d8b33c1f4975fe39c4637/win32/win32.c#L4513) - rogerdpack
1个回答

5

如果您需要定时功能,您可以使用线程:

Thread.new do
  sleep 10 * 60
  begin
    Process.kill('QUIT', pid)
  rescue Errno::ESRCH
    # process exited normally
  end
end

_, status = Process.wait2 pid
puts status.exited?

我不确定为什么QUIT对你没有起作用。我无法重现你的错误。


谢谢你的回答,Max,但是我仍然无法使用这个解决方案,因为 Process.kill('QUIT', pid) 不起作用,错误显示不支持的名称 `SIGQUIT'。 - user3415827
1
最终我使用了system("taskkill /im pid /f /t >nul 2>&1")而不是Process.kill('QUIT', pid),你的答案正是我所需要的。 - user3415827
您可以使用以下命令获取支持的信号列表: puts Signal.list - genegc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接