2017-04-10 22 views
1

我想捕獲發送到Ruby進程的信號。如何在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.trapputs語句塊不執行,爲什麼?

回答

5

在運行代碼來捕獲信號後,您需要睡眠。發送信號時它仍然處於睡眠狀態,並且捕捉它的代碼尚未運行。

此代碼將陷阱你的信號:

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

sleep 60