模块 Signal

许多操作系统允许向运行中的进程发送信号。一些信号对进程有预定义的影响,而另一些信号可以在代码级别被捕获并进行处理。例如,您的进程可以捕获 USR1 信号并用它来切换调试,并且可以使用 TERM 信号来启动受控的关闭。

pid = fork do
  Signal.trap("USR1") do
    $debug = !$debug
    puts "Debug now: #$debug"
  end
  Signal.trap("TERM") do
    puts "Terminating..."
    shutdown()
  end
  # . . . do some work . . .
end

Process.detach(pid)

# Controlling program:
Process.kill("USR1", pid)
# ...
Process.kill("USR1", pid)
# ...
Process.kill("TERM", pid)

产生

Debug now: true
Debug now: false
Terminating...

可用信号名称及其解释列表是系统相关的。Signal 传递语义在不同系统之间也可能有所不同;特别是信号传递可能并不总是可靠的。