歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Unix平台防止僵屍進程

Unix平台防止僵屍進程

日期:2017/2/28 16:17:59   编辑:Linux教程

在Unix主機上產生僵屍進程是比較頭痛的,因為僵屍進程是非常頑固的,用kill是沒有用的,因為它已經死了,要不怎麼叫僵屍呢?

如果僵屍進程由某個父進程產生,而父進程尚未退出,則僵屍進程會一直存在,用
ps –ef | grep
查一下,看看PPID是誰,父進程退出時一般僵屍也會被處理掉的,如果看到僵屍的父進程ID是1,這樣就很麻煩了,因為1是系統內核進程,是殺不掉的,所以只能重啟系統了,但生產環境下重新啟動都算作嚴重故障,後果很嚴重的,所以在寫程序時只能盡量避免出現僵屍進程。

AIX比較煩人的地方就是用popen打開的進程,在使用pclose關閉時不一定能把子進程wait掉,所以可能出現僵屍。

可以通過修改SIGCHLD的處理函數來忽略這個消息,這樣系統將會自動回收進程表,但是wait函數將會失效,如果想通過wait來判斷子進程是否退出就做不到了。根據實際應用場景來自行選擇如何處理。

#if defined(SIGCHLD)
signal(SIGCHLD,SIG_IGN);
#elif defined(SIGCLD)
signal(SIGCLD,SIG_IGN);
#endif

SIGCHLD、SIGCLD兩個消息是相同的,有些老的系統可能沒有定義前者可以使用後者。

Copyright © Linux教程網 All Rights Reserved