Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156244
  • 博文数量: 27
  • 博客积分: 710
  • 博客等级: 上士
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 20:08
文章分类

全部博文(27)

文章存档

2012年(1)

2011年(22)

2010年(4)

我的朋友

分类: LINUX

2011-09-28 23:28:50


系统中的僵尸进程都要由wait系统调用来回收.

进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
wait(等待子进程中断或结束)

相关函数 waitpid,fork
表头文件
#include
#include
定义函数 pid_t wait (int * status)
函数说明
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态 值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status 可以设成NULL。子进程的结束状态值请参考waitpid()。
返回值

如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno 中


例子1:
#include
#include
#include
#include

int main(void)
{
    pid_t pid,pid01;

    int i,status;

    pid = fork();

    if(pid < 0)
    {
        printf("create process failure! error");
        exit(1);
    }
    else if(pid == 0)
    {
        printf("child process pid=%d\n",getpid());
        exit(3);
    }
    else
    {

        pid01 = wait(&status);
        i = WEXITSTATUS(status);

        if(i != 0)
        {
            printf("parent process pid=%d\n",getpid());
            printf("child process %d exit normally",pid01);
            printf(" status=%d\n",i);
        }
        else
            printf("the child process %d exit abnormally\n",pid01);
    }
    exit(0);
}




阅读(1440) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~