linux下的进程(2)

linux下的wait()函数linux

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

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

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

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()函数则是能够等待某一个特定的进进程,而且它有若干个选项,能够控制它所等待的进程。原型

相关文章
相关标签/搜索