2017-04-10 3 views
1

Ich möchte ein Signal an einen Ruby-Prozess gesendet werden.So fangen Sie Signale in Ruby-Prozess

Der Prozess ist die folgende Datei mit dem Namen wait.rb:

sleep 60 

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

Ich betreibe wait.rb, und in einer anderen Shell bash die PID wait.rb finden und ausführen:

kill -15 pid 

Ich erwartete, dass "Signal 15 gefangen!" würde in der ersten Shell gedruckt werden, wo ich wait.rb ausgeführt habe, aber es ist nicht. Stattdessen erhalte ich diese Ausgabe:

Terminated: 15 

Warum ist die puts Anweisung im Signal.trap Block nicht ausgeführt?

Antwort

5

Sie müssen schlafen, nachdem Sie Ihren Code ausgeführt haben, um das Signal abzufangen. Es wird immer noch schlafen, wenn Sie das Signal senden, und der Code zum Abfangen ist noch nicht ausgeführt.

Dieser Code wird Trap Ihr ​​Signal:

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

sleep 60 
Verwandte Themen