ruby - 如何在 Ruby 进程中捕获信号

标签 ruby unix signals

我想捕获发送到 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/

相关文章:

python信号,中断系统调用

ruby-on-rails - Mechanize :无法传递信息

ruby-on-rails - 如何动态声明这些实例方法?

ruby - 有没有办法在没有 JRuby 的情况下从 Ruby 连接到 H2 数据库?

regex - linux查找正则表达式

windows - Vim:\n 与\r

linux - 在某些情况下 SIGKILL 不起作用吗?

ruby - 在 ruby​​ 中合并或求和 "keys"上的 2 个数组

Bash 如何将单词附加到行尾?

c - 在运行前台进程时等待后台进程终止