判斷子進程是否存在

來源:互聯網
上載者:User

if kill(pidt,0)  <  0 ,child process has dead.

 

else child alive;

 

前提條件是,父進程已經處理了SIGCHLD.

 

否則,此檢測方法將失效

 

 

《Unix 環境進階編程》的解釋為:kill(pid_t pid,int signo)

 

      posix將編號為0的訊號定義為空白訊號。如果signo參數是0,則kill仍執行正常的錯誤檢查,但不發送訊號。這常被用來確定一個特定進程是否仍舊存在。如果向一個並不存在的進程發送空訊號,則傳回值為-1,並將errno設定為ESRCH。但是,應當瞭解,Unix系統在經過一段時間後會重新使用進程ID,所以現有的具有所給定進程ID的進程並不一定就是你想要的進程。

     還應該理解的是,對於進程是否存在的這種測試不是原子操作。在kill向調用者返回測試結果時,原來存在的被測試進程此時可能已經終止,所以這種測試並無多大價值。

      如果調用kill為調用進程產生訊號,而且此訊號是不被阻塞的,那麼在 kill返回之前,就會將signo或者某個其他未決的非阻塞訊號傳送至該進程。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.