【问题标题】:Kill a process using its PID in ruby在 ruby​​ 中使用其 PID 杀死一个进程
【发布时间】:2014-06-07 01:39:00
【问题描述】:

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

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

Process.kill('INT', pid)

但是当我使用QUIT 信号而不是INT 时,错误不断出现,例如Bad file descriptorunsupported name 'SIGQUIT'

第二,如何在调用方法杀死进程前设置10分钟定时器?

谢谢。

【问题讨论】:

  • 可能使用Process.kill 'SIGKILL', pid 代替(INT 是用来发送 ctrl+c 的,我不知道它的实现是否有效...github.com/ruby/ruby/blob/…

标签: ruby windows process pid kill-process


【解决方案1】:

对于您的时间安排,您可以使用线程:

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' .
  • 所以最后我使用了 system("taskkill /im pid /f /t >nul 2>&1") 而不是 Process.kill('QUIT', pid),而你的答案正是我需要。
  • 您可以获取支持哪些信号的列表: puts Signal.list
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-18
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 2014-08-30
相关资源
最近更新 更多