Linux 僵尸进程
发布时间:2020-12-14 15:32:00 所属栏目:百科 来源:网络整理
导读:如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。 任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。 的 #incl
如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。 的
#include
<span style="color: #0000ff">int { <span style="color: #0000ff">int i = <span style="color: #800080">100<span style="color: #000000">; pid_t pid=<span style="color: #000000">fork(); <span style="color: #0000ff">if(pid < <span style="color: #800080">0<span style="color: #000000">) { perror(<span style="color: #800000">"<span style="color: #800000">fork failed.<span style="color: #800000">"<span style="color: #000000">); exit(<span style="color: #800080">1<span style="color: #000000">); } <span style="color: #0000ff">if(pid > <span style="color: #800080">0<span style="color: #000000">) { printf(<span style="color: #800000">"<span style="color: #800000">This is the parent process. My PID is %d.n<span style="color: #800000">"<span style="color: #000000">,getpid()); <span style="color: #0000ff">for(; i > <span style="color: #800080">0; i--<span style="color: #000000">) { sleep(<span style="color: #800080">1<span style="color: #000000">); } } <span style="color: #0000ff">else <span style="color: #0000ff">if(pid == <span style="color: #800080">0<span style="color: #000000">) { printf(<span style="color: #800000">"<span style="color: #800000">This is the child process. My PID is: %d. My PPID is: %d.n<span style="color: #800000">"<span style="color: #000000">,getpid(),getppid()); } <span style="color: #0000ff">return <span style="color: #800080">0<span style="color: #000000">; }
$ zomprocdemo.c -o zomprocdemo
$ ./zomprocdemo
#include
<span style="color: #0000ff">int { pid_t pid; pid { perror(<span style="color: #800000">"<span style="color: #800000">fork failed<span style="color: #800000">"<span style="color: #000000">); exit(<span style="color: #800080">1<span style="color: #000000">); } <span style="color: #0000ff">if (pid == <span style="color: #800080">0<span style="color: #000000">) { <span style="color: #0000ff">int<span style="color: #000000"> i; <span style="color: #0000ff">for (i = <span style="color: #800080">3; i > <span style="color: #800080">0; i--<span style="color: #000000">) { printf(<span style="color: #800000">"<span style="color: #800000">This is the childn<span style="color: #800000">"<span style="color: #000000">); sleep(<span style="color: #800080">1<span style="color: #000000">); } <span style="color: #008000">//<span style="color: #008000"> exit with code 3 for test. exit(<span style="color: #800080">3<span style="color: #000000">); } <span style="color: #0000ff">else<span style="color: #000000"> { <span style="color: #0000ff">int<span style="color: #000000"> stat_val; wait(&<span style="color: #000000">stat_val); <span style="color: #0000ff">if<span style="color: #000000"> (WIFEXITED(stat_val)) { printf(<span style="color: #800000">"<span style="color: #800000">Child exited with code %dn<span style="color: #800000">"<span style="color: #000000">,WEXITSTATUS(stat_val)); } } <span style="color: #0000ff">return <span style="color: #800080">0<span style="color: #000000">; }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |