如果我運行以下命令:
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
將$?
設置爲未退出狀態?
如果我運行以下命令:
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
將$?
設置爲未退出狀態?
該進程在收到kill信號後立即退出,因此Process.wait會立即將相應的Process :: Status對象分配給$?並允許執行繼續。流程::狀態#退出?只有當進程正常退出時才返回true,所以你看到的是預期的行爲 - SIGKILL通常不會導致正常的終止。
從Process::Status
文檔:
Posix的上使用一個16位的整數 處理系統記錄信息。較低的位記錄過程狀態(已停止,已退出 ,發信號爲),高位可能包含其他 信息。
exited
的狀態將意味着該過程本身退出(過程稱爲exit()
)。但是,由於您強行終止了該進程,因此它將具有signaled
的狀態,這意味着由於未被捕獲的信號而退出進程(本例中爲KILL
)。