免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2118 | 回复: 10
打印 上一主题 下一主题

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-27 15:04 |只看该作者 |倒序浏览
#include <stdio.h>;
#include <fcntl.h>;
#include <signal.h>;
#include <unistd.h>;

void main()
{
       if (fork() == 0)
               sleep(10);
       else
               exit(0);
}  

test15:/usr/tux/zp/tmp $ cc -o zomb test.c
test15:/usr/tux/zp/tmp $ ./zomb
test15:/usr/tux/zp/tmp $ ps -ef|grep zomb
    tux  8160  8030  0 15:15:13 pts/ti    0:00 grep zomb
    tux  8158     1  0 15:15:08 pts/ti    0:00 ./zomb
可见父进程ID已经是1了。为什么要fork2次

论坛徽章:
0
2 [报告]
发表于 2005-04-27 15:17 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

你试试

if (fork() == 0) {
             exit(0);
}  else {
             sleep(10);
}

应该就有了吧 你理解错了

论坛徽章:
0
3 [报告]
发表于 2005-04-27 15:55 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

应该是你理解错了吧。

论坛徽章:
0
4 [报告]
发表于 2005-04-27 17:09 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

apue中提到的fork两次避免僵死进程指的是,要求父进程不退出的前提下如何避免僵死进程。而楼主给出的代码中父进程已经退出,当然不会产生僵死进程。

论坛徽章:
0
5 [报告]
发表于 2005-04-27 17:13 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

我后来改了代码。当子进程退出而父进程还在sleep的时候用PS -ef根本没有发现有僵死进程啊

论坛徽章:
0
6 [报告]
发表于 2005-04-27 23:40 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

楼主可能没明白进程执行的顺序,父子进程说不定谁先运行
void main()
{
      if (fork() == 0)
              sleep(10);
      else
              exit(0);
}   
父进程已经在子进程前终止了,子进程交给INIT了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-04-28 09:23 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

fork()一次就可以避免zombie
第二次fork()是为了与控制终端脱离。
第一次fork()的子进程仍然可以与终端交互的,如按下中断键,则会产生中断信号到该子进程中
第二次fork()的子进程不能得到控制终端,在精灵进程中一般这样做。

论坛徽章:
0
8 [报告]
发表于 2005-04-28 10:37 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

原帖由 "yuxh" 发表:
fork()一次就可以避免zombie
第二次fork()是为了与控制终端脱离。
第一次fork()的子进程仍然可以与终端交互的,如按下中断键,则会产生中断信号到该子进程中
第二次fork()的子进程不能得到控制终端,在精灵进程中..........


好正点呀。原来精灵进程如此简单。

论坛徽章:
0
9 [报告]
发表于 2005-04-28 11:19 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

原帖由 "yuxh" 发表:
fork()一次就可以避免zombie
第二次fork()是为了与控制终端脱离。
第一次fork()的子进程仍然可以与终端交互的,如按下中断键,则会产生中断信号到该子进程中
第二次fork()的子进程不能得到控制终端,在精灵进程中..........

yuxh,能不能说得再明白点,谢谢
另外、为什么父进程没有退出,子进程退出会产生僵死进程????

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-04-28 11:46 |只看该作者

fork2次才会避免zombie,可是我没有fork2次也没有发现zombie啊

>;>;yuxh,能不能说得再明白点,谢谢
另外、为什么父进程没有退出,子进程退出会产生僵死进程????

因为父进程没有wait或者waitpid 收回 子进程 返回给父进程的信息..所以就产生了僵尸进程..APUE说的很明白了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP