我想捕获发送到Ruby进程的信号.
该进程是以下文件,名为wait.rb:
sleep 60
Signal.trap(15) {
puts "caught signal 15!"
}
Run Code Online (Sandbox Code Playgroud)
我运行wait.rb,并在另一个bash shell中找到wait.rb的PID并执行:
kill -15 pid
Run Code Online (Sandbox Code Playgroud)
我期待"抓住信号15!" 将打印在我执行wait.rb的第一个shell中,但事实并非如此.相反,我得到这个输出:
Terminated: 15
Run Code Online (Sandbox Code Playgroud)
为什么块中的puts语句Signal.trap没有执行?
运行代码以捕获信号后,您需要睡眠.发送信号时它仍然处于休眠状态,捕获它的代码尚未运行.
此代码将捕获您的信号:
Signal.trap(15) {
puts "caught signal 15!"
}
sleep 60
Run Code Online (Sandbox Code Playgroud)