如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。
的
#include
main(<span style="color: #0000ff">void <span style="color: #000000">)
{
<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">;
}
<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
main(<span style="color: #0000ff">void <span style="color: #000000">)
{
pid_t pid;
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">) {
<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 child\n<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 %d\n<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">;
}
<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 child\n<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 %d\n<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">;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。