我有一個由pid
指定的子進程。這個過程可能是:殺害和收割過程
- 運行
- 已關閉/殭屍(unreaped)
- 已經收穫了(因此不再存在)
我想殺死這個進程,並確保沒有殭屍遺蹟。目前我的代碼是
kill(pid, SIGKILL);
int temp;
waitpid(pid, &temp, 0);
這工作?
編輯:由pid
指定的過程是我的程序的孩子。
我有一個由pid
指定的子進程。這個過程可能是:殺害和收割過程
我想殺死這個進程,並確保沒有殭屍遺蹟。目前我的代碼是
kill(pid, SIGKILL);
int temp;
waitpid(pid, &temp, 0);
這工作?
編輯:由pid
指定的過程是我的程序的孩子。
這看起來很好,但我想知道爲什麼你會讓情況3發生。您應該執行一些簿記,您的哪些子流程已終止並正在等待收割。 一種方法是爲SIGCHLD
安裝一個處理程序,設置waitpid
的順序標誌。這樣你保證所有的pid實際上都是你的子進程的那些pid。
應該可以正常工作,但一定要檢查waitpid的返回值。 由於信號,該呼叫可能已經返回。
您應該考慮一下'pid'已被重用於其他進程的可能性。 – NPE
這是一個很好的觀點。首先檢查這個過程是否是我的程序的一個孩子可能是一個好主意? – Sticky
@Sticky:不需要檢查,因爲如果該pid不是孩子,waitpid()會失敗並將errno設置爲ECHILD。 – janneb