Linux中的常用訊號

來源:互聯網
上載者:User

 

1..SIGINT 程式終止(interrupt)訊號, 在使用者鍵入INTR字元(通常是Ctrl-C)時發出

 

2) SIGTERM 程式結束(terminate)訊號, 與SIGKILL不同的是該訊號可以被阻塞和 
處理. 通常用來要求程式自己正常退出. shell命令kill預設產生這 個訊號. 

 

3) SIGCHLD 子進程結束時, 父進程會收到這個訊號.

 

一般當一個進程終止後都會發送SIGCHLD訊號給它的父進程,並由此變為僵死進程直到父進程接收了其狀態報表其資源才會被系統釋放;   
  處理方法有3種:   
  1. 當子進程終止時父進程接收SIGCHLD訊號並調用waitpid()函數接收其狀態報表,最好用sigaction(),signal()不可靠;   
  2. 通過函數sigaction指明標誌SA_NOCLDWAIT來指定訊號SIGCHLD的動作,這使得核心在調用者的子進程終止時不建立僵死進程。   
  3. 二次fork調用;   

 

 

只有長期運行而且要產生子進程的程式才需要用wait或waitpid。   
僵死進程產生的原因:   
     子進程退出後(不管是否是正常退出),它在記憶體中會遺留部分資訊成為一個僵死進程,同時核心會向其父進程發送SIGCHLD(或SIGCLD)訊號。此時要分幾種情況:   
            1、父進程處理SIGCHLD訊號,調用wait,僵死進程消失。這樣我們就看不到殭屍進程。   
            2、父進程忽略SIGCHLD訊號,隨著子進程不斷產生、結束,僵死進程的數目不斷增加,導致影響系統速度及其他一些問題。   
          不需長期啟動並執行程式,即使產生子進程也不會導致大量僵死進程存在。因為,父進程退出時,其產生的子進城成為“孤兒“進程,由init(1號進程)進程接管,init進程在子進程退出時會處理SIGCHLD訊號,給子進程“收屍“。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.