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()函数则是可以等待某一个特定的进进程,并且它有若干个选项,可以控制它所等待的进程。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。