Modul Signal

Viele Betriebssysteme erlauben das Senden von Signalen an laufende Prozesse. Einige Signale haben eine definierte Auswirkung auf den Prozess, während andere auf Codeebene abgefangen und behandelt werden können. Zum Beispiel kann Ihr Prozess das USR1-Signal abfangen und zum Umschalten des Debuggings verwenden, und TERM zur Einleitung einer kontrollierten Abschaltung verwenden.

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)

ergibt

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

Die Liste der verfügbaren Signalnamen und deren Interpretation ist systemspezifisch. Die Zustellungssemantik von Signal kann ebenfalls zwischen Systemen variieren; insbesondere kann die Signalzustellung nicht immer zuverlässig sein.