如何在Ruby进程中捕获信号

nic*_*n42 1 ruby unix signals

我想捕获发送到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没有执行?

Las*_*and 5

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

此代码将捕获您的信号:

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

sleep 60
Run Code Online (Sandbox Code Playgroud)