linux下的进程(2)

2017-05-05 02:23

linux下的wait()函数

孤儿进程
孤儿进程是父进程结束,还存在子进程没有结束,那么这个子进程则成为孤儿进程,孤儿进程自动将init进程作为自己的父进程。

僵尸进程
子进程终止时,它与父进程之间的关系还会保存,直到父进程也正常调用wait()函数才结束。当父进程没有调用wait或waitpid函数时获取子进程的状态信息,那么子进程的进程描述符依然保存在系统中。这种进程成为僵尸进程。

下面是wait()函数和waitpid()函数的原型

pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc,int options);

当执行成功的时候,返回进程ID。

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>   
#include <unistd.h>

int main(void)
{
    pid_t pid,childpid;
    
    if ((pid = fork()) > 0){
        printf("that is parent\n");
        if((childpid=wait(&status))>0)
            printf("child is finished \n");
        for(int i=0;i<3;i++)
            printf("%d \n",i);
    }
    else if (pid == 0) {
        printf("that is child \n");
        for(int i=0;i<3;i++)
            printf("%d \n",i);    
    }
    else {
        printf("error");
    }
    exit(0);
}

下面的是结果

从结果可以看出在子进程终止前,wait使其调用者阻塞。而waitpid()函数则是可以等待某一个特定的进进程,并且它有若干个选项,可以控制它所等待的进程。