我想捕获发送到 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.trap
block 中的puts
语句没有执行?
最佳答案
运行代码以捕获信号后,您需要 sleep 。当你发送信号时它还在休眠,捕获它的代码还没有运行。
此代码将捕获您的信号:
Signal.trap(15) {
puts "caught signal 15!"
}
sleep 60
关于ruby - 如何在 Ruby 进程中捕获信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328310/