如何在Ruby进程中捕获信号

时间:2017-04-10 16:21:59

标签: ruby unix signals

我想捕获发送给Ruby进程的信号。

该过程是以下文件,名为wait.rb:

sleep 60

Signal.trap(15) {
  puts "caught signal 15!"
}

我运行wait.rb,并在另一个bash shell中找到wait.rb的PID并执行:

kill -15 pid

我预计"会发现信号15!"将打印在我执行wait.rb的第一个shell中,但事实并非如此。相反,我得到了这个输出:

Terminated: 15

为什么puts块中的Signal.trap语句没有执行?

1 个答案:

答案 0 :(得分:5)

运行代码以捕获信号后,您需要睡眠。发送信号时它仍然处于休眠状态,陷阱的代码尚未运行。

此代码会捕获您的信号:

Signal.trap(15) {
  puts "caught signal 15!"
}

sleep 60