殭屍程序解決方法

2021-05-23 00:11:13 字數 926 閱讀 6179

1.  殭屍程序

摘抄一段

in unix system terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie.

在unix 系統中,乙個程序結束了,但是他的父程序沒有等待(呼叫wait / waitpid)他, 那麼他將變成乙個殭屍程序。

2.  解決方法

1)忽略sigchild訊號,這個方式最簡單,但有時會給其他程式帶來影響

struct sigaction sa;

sa.sa_handler = sig_ign;

#ifdef sa_nocldwait

sa.sa_flags = sa_nocldwait;

#else

sa.sa_flags = 0;

#endif

sigemptyset (&sa.sa_mask);

sigaction (sigchld, &sa, null);

其中sigaction (sigchld, &sa, null);換作sigaction (sigchld, &new_sa, &old_sa);可以使用old_sa來儲存之前的,之後可以再用sigaction (sigchld, &old_sa, null);來恢復。

2)利用孫子程序來處理事務,fork兩次

pid_t pid;

pid = fork();

if (pid < 0)else if(pid == 0)else if(pid == 0)else

}//父程序繼續

3)使用waitpid或者wait來處理

其中waitpid(pid, null, wnohang);使用引數wnohang可以在子程序未退出時直接返回而不等待,但後面還是要繼續判斷處理。

Linux的殭屍程序及其解決方法

1.產生原因 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。通過ps命令檢視其帶有defunct的標誌。殭屍程序是乙個早已死亡的程序,但在程序表 processs table 中仍佔了乙個位置 slot 但是如果該程序的父程序...

殭屍程序產生原因和解決方法

在linux系統中,當用ps命令觀察程序的執行狀態時,經常看到某些程序的狀態列為defunct,這就是所謂的 殭屍 程序。殭屍 程序是乙個早已死亡的程序,但在程序表 processs table 中仍佔了乙個位置 slot 由於程序表的容量是有限的,所以,defunct程序不僅占用系統的記憶體資源,...

Linux 殭屍程序產生原因及解決方法

linux 允許程序查詢核心以獲得其父程序的 pid,或者其任何子程序的執行狀態。例如,程序可以建立乙個子程序來執行特定的任務,然後呼叫諸如 wait 這樣的一些庫函式檢查子程序是否終止。如果子程序已經終止,那麼,它的終止代號將告訴父程序這個任務是否已成功地完成。為了遵循這些設計原則,不允許 lin...