2017-04-10 43 views
1

我想捕获发送到Ruby进程的信号。如何在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 

Signal.trapputs语句块不执行,为什么?

回答

5

在运行代码来捕获信号后,您需要睡眠。发送信号时它仍然处于睡眠状态,并且捕捉它的代码尚未运行。

此代码将陷阱你的信号:

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

sleep 60