QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 828|回复: 6

请教一个多进程编程问题。

[复制链接]
发表于 2005-5-11 14:17:27 | 显示全部楼层 |阅读模式
目前正在学Unix上的编程。一个有关进程编程的问题不太清楚。请教。
pid=fork();
if(pid==0)
{
  //exec()
  exit(0);
}
else if(pid1=0)
{
  wait();
}

用exec系统调用的程序代码大致如下
int main(void)
{
  //...
  return 0;//这里只有return 而没有exit
}

此时,exec调用的程序完全替换了子进程,这么说也替换了下面的exit(0).而它调用的程序没有用exit()结束。总的来说,子进程没有调用exit(),这样是否会产生僵尸进程?(按教材上说的,1.exec会替换整个进程 2.子进程没有使用exit()会导致僵尸进程问题。)
谢谢。
发表于 2005-5-11 15:12:50 | 显示全部楼层
exec替换了当前进程,也就是是一个进程,所以不会有zombie的问题。
回复

使用道具 举报

 楼主| 发表于 2005-5-11 15:51:50 | 显示全部楼层
那么说父进程不会等待用了exec的子进程了?
那此时你进程用了wait会如何?
另外,ghost和zombie进程有何区别?
谢谢。
回复

使用道具 举报

发表于 2005-5-11 16:11:24 | 显示全部楼层
会wait

ghost?那是什么?
回复

使用道具 举报

 楼主| 发表于 2005-5-12 09:48:14 | 显示全部楼层

继续……

ghost是指幽灵进程。
幽灵进程和僵尸进程是一回事吗?

会wait?
你的意思是说:这时候用wait的话父进程就会等待,而如果不用的话,也没关系,不会产生僵尸进程吗?
我的意思是问:这样的程序在父进程中是否使用wait没有关系是吗?

子进程被替换后和被替换前都是一样的进程号,内核是如何识别这个“新”的子进程不用被等待的?
回复

使用道具 举报

发表于 2005-5-12 10:28:14 | 显示全部楼层
说实话,有关zombie回收的问题经典unix的说法我已经记不清了。

不过,现实中似乎不同的unix系统的处理方法是不一样的。例如
我使用linux来做验证,linux2.4系列内核是按照下述方法来决定
zombie的。
  1。如果子进程先于父进程结束,那它就变成zombie,以便父进
     程稍后可以通过wait调用获得它的状态。wait被调用后,子
     进程的资源就被回收。
  2。如果子进程后于父进程结束,那它就会被内核直接回收。

所以,在linux 2.4吓,产生大量zombie似乎只有一种情况,一个
常驻进程经常fork子进程而又不用wait回收它们。
回复

使用道具 举报

 楼主| 发表于 2005-5-12 10:41:07 | 显示全部楼层
谢谢。
我现在在搞Linux和FreeBSD。
看来应该多做实践。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 03:42 , Processed in 0.090514 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表