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