昨天,好好看了看有殭屍程序模組的**,發現呼叫popen後還是有pclose關掉的,可為什麼還有那個shell"殭屍"掉呢,實在搞不懂,今晚,做是實驗:
#include
#include
#include
#include
void set_stimer(int s1) else
setitimer(itimer_real, &value1, null); }
void use_popen ()
buffer = (char*) malloc (1024);
if (buffer == null)
fread (buffer,sizeof(char),256,pfile);
printf("%s/n",buffer);
// fclose (pfile);//注:沒有pclose
free (buffer);
}void init_sigaction()
int main(int argc, char *argv)
return 0;}
執行結果:
四 9月 18 19:02:07 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3341 pts/0 00:00:00 z
3345 pts/0 00:00:00 date
3349 pts/0 00:00:00 date
3353 pts/0 00:00:00 date
3357 pts/0 00:00:00 date
3361 pts/0 00:00:00 date
3365 pts/0 00:00:00 date
3369 pts/0 00:00:00 date
3373 pts/0 00:00:00 date
3374 pts/0 00:00:00 ps
四 9月 18 19:02:12 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3341 pts/0 00:00:00 z
3345 pts/0 00:00:00 date
3349 pts/0 00:00:00 date
3353 pts/0 00:00:00 date
3357 pts/0 00:00:00 date
3361 pts/0 00:00:00 date
3365 pts/0 00:00:00 date
3369 pts/0 00:00:00 date
3373 pts/0 00:00:00 date
3377 pts/0 00:00:00 date
3378 pts/0 00:00:00 ps
四 9月 18 19:02:17 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3341 pts/0 00:00:00 z
3345 pts/0 00:00:00 date
3349 pts/0 00:00:00 date
3353 pts/0 00:00:00 date
3357 pts/0 00:00:00 date
3361 pts/0 00:00:00 date
3365 pts/0 00:00:00 date
3369 pts/0 00:00:00 date
3373 pts/0 00:00:00 date
3377 pts/0 00:00:00 date
3381 pts/0 00:00:00 date
3382 pts/0 00:00:00 ps
四 9月 18 19:02:22 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3341 pts/0 00:00:00 z
3345 pts/0 00:00:00 date
3349 pts/0 00:00:00 date
3353 pts/0 00:00:00 date
3357 pts/0 00:00:00 date
3361 pts/0 00:00:00 date
3365 pts/0 00:00:00 date
3369 pts/0 00:00:00 date
3373 pts/0 00:00:00 date
3377 pts/0 00:00:00 date
3381 pts/0 00:00:00 date
3385 pts/0 00:00:00 date
3386 pts/0 00:00:00 ps
四 9月 18 19:02:27 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3341 pts/0 00:00:00 z
3345 pts/0 00:00:00 date
3349 pts/0 00:00:00 date
3353 pts/0 00:00:00 date
3357 pts/0 00:00:00 date
3361 pts/0 00:00:00 date
3365 pts/0 00:00:00 date
3369 pts/0 00:00:00 date
3373 pts/0 00:00:00 date
3377 pts/0 00:00:00 date
3381 pts/0 00:00:00 date
3385 pts/0 00:00:00 date
3389 pts/0 00:00:00 date
3390 pts/0 00:00:00 ps
很明顯,有殭屍程序產生
用fclose關掉popen 開啟的檔案
#include
#include
#include
#include
void set_stimer(int s1) else
setitimer(itimer_real, &value1, null); }
void use_popen ()
buffer = (char*) malloc (1024);
if (buffer == null)
fread (buffer,sizeof(char),256,pfile);
printf("%s/n",buffer);
fclose (pfile);
free (buffer);
}void init_sigaction()
int main(int argc, char *argv)
return 0;}
[root@lanhai-linux popen]# pid tty time cmd
3278 pts/0 00:00:00 bash
3429 pts/0 00:00:00 p
3430 pts/0 00:00:00 ps
四 9月 18 19:02:58 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3429 pts/0 00:00:00 p
3432 pts/0 00:00:00 ps
沒有殭屍程序產生
#include
#include
#include
#include
#include
#include
void set_stimer(int s1) else
setitimer(itimer_real, &value1, null); }
void use_popen ()
buffer = (char*) malloc (1024);
if (buffer == null)
fread (buffer,sizeof(char),256,pfile);
printf("%s/n",buffer);
// fclose (pfile);
free (buffer);
}void init_sigaction()
void process_zombie()
//void init_sigaction2()
int main(int argc, char *argv)
return 0;}
pid tty time cmd
3278 pts/0 00:00:00 bash
3493 pts/0 00:00:00 pz
3506 pts/0 00:00:00 ps
四 9月 18 19:04:36 cst 2008
pid tty time cmd
3278 pts/0 00:00:00 bash
3493 pts/0 00:00:00 pz
3508 pts/0 00:00:00 ps
也沒有產生殭屍程序
對於那個用waitpid才能"收拾"掉的"[sh]"產生的原因.還是不詳!!!!!!!
殭屍程序和如何刪除殭屍程序
當乙個子程序結束後,他的父程序沒有等待他 wait waitpid 清除他的所有資源時,它就變成乙個殭屍程序。在linux系統中,在每個程序退出的時候,核心釋放該程序所有的資源,包括開啟的檔案,占用的記憶體等。但是仍然為其保留一定的資訊 包括程序號the process id,退出狀態the ter...
檢視殭屍程序並殺掉殭屍程序
在運維過程中,我們經常會碰到機器由於某幾個特殊的殭屍程序造成整台伺服器上的程序異常卡死,負載變高。例如以下 其中,存在8個殭屍程序,並且程序19712的cpu使用異常。檢視具體的殭屍程序有哪些 發現這些子殭屍程序的父程序即為19712程序。其對應的其實就是namenode程序 解決辦法 1 如果業務...
Defunct程序 殭屍程序
下面談談 defunct 程序,中文翻譯叫殭屍程序。下文整理於網路以及apue一書。一 什麼是殭屍程序 在unix 系統中,乙個程序結束了,但是他的父程序沒有等待 呼叫wait waitpid 他,那麼他將變成乙個殭屍程序。當用ps命令觀察程序的執行狀態時,看到這些程序的狀態列為defunct。殭屍...