我想捕获发送给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
语句没有执行?
答案 0 :(得分:5)
运行代码以捕获信号后,您需要睡眠。发送信号时它仍然处于休眠状态,陷阱的代码尚未运行。
此代码会捕获您的信号:
Signal.trap(15) {
puts "caught signal 15!"
}
sleep 60