殭屍進程

     殭屍進程就是父進程fork之後並沒有wait子進程。在子進程退出的時候,內核釋放該進程所有的資源,比如文件描述符,內存,等等,但是依然爲該進程保留一定的信息,只有該進程的父進程wait之後纔會釋放掉這些保留的信息。如果父進程沒有wait,那麼子進程就變成了殭屍進程。在高併發的服務器中,殭屍進程會有很大的危害。如果殭屍進程過多,那麼就會有大量的進程號被殭屍進程佔用,但是系統所能使用的進程是有限的。如果殭屍進程多到連新進程的進程號都沒法提供,那麼服務器就會一直處於拒絕狀態了。
     但是高併發服務器的父進程肯定會fork許多子進程,而且有可能父進程不需要知道任何子進程的結束信息,如果還wait每個子進程的話,肯定會造成資源的大量良妃。針對這種情況,有一個非常簡單卻非常有效的辦法。當子進程exit()的時候,內核會向父進程發送一個SIGCHLD信號。將這個信號的處理方式設置爲SIG_IGN,那麼就可以讓父進程忽略子進程發送的SIGCHLD信號了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章