2012-08-09 44 views
0

如果我運行以下命令:

Process.kill "KILL", pid 
Process.wait pid 
raise "application did not exit" if not $?.exited? 
raise "application failed" if not $?.success? 

我得到的錯誤「應用程序沒有退出」。爲什麼Process.wait沒有在等待?更確切地說,爲什麼Process.wait$?設置爲未退出狀態?

回答

0

該進程在收到kill信號後立即退出,因此Process.wait會立即將相應的Process :: Status對象分配給$?並允許執行繼續。流程::狀態#退出?只有當進程正常退出時才返回true,所以你看到的是預期的行爲 - SIGKILL通常不會導致正常的終止。

0

Process::Status文檔:

Posix的上使用一個16位的整數 處理系統記錄信息。較低的位記錄過程狀態(已停止,已退出 ,發信號爲),高位可能包含其他 信息。

exited的狀態將意味着該過程本身退出(過程稱爲exit())。但是,由於您強行終止了該進程,因此它將具有signaled的狀態,這意味着由於未被捕獲的信號而退出進程(本例中爲KILL)。