加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Linux 僵尸进程

发布时间:2020-12-14 15:32:00 所属栏目:百科 来源:网络整理
导读:如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。 任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。 的 #incl

如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。

#include

<span style="color: #0000ff">int 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">;
}

$ zomprocdemo.c -o zomprocdemo

$ ./zomprocdemo

#include

<span style="color: #0000ff">int 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 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">;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读