[APUE]进程控制(中)
一、wait和waitpid函数 当一个进程正常或异常终止时会向父进程发送SIGCHLD信号。对于这种信号系统默认会忽略。调用wait/waidpid的进程可能会: 阻塞(如果其子进程都还在运行); 立即返回子进程的终止状态(如果一个子进程已经终止正等待父进程存取其终止状态); 出错立即返回(如果它没有任何子进程); 如果进程由于收到SIGCHLD信号而调用wait,则可期望wait会立即返回。但是在任一时刻调用则进程可能阻塞。 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *statloc); pid_t waitpid(pid_t pid, int *statloc, int options); 返回值: 成功返回进程ID, 出错-1. 这两个函数区别: wait如果在子进程终止前调用则会阻塞,而waitpid有一选项可以使调用者不阻塞。 waitpid并不等待第一个终止的子进程--它有多个选项,可以控制它所等待的进程。 如果调用者阻塞而且它有多个子进程,则在其一个子进程终止时,wait就立即返回。因为wait返回子进程ID,所以调用者知道是哪个子进程终止了。 参数statloc是一个整型指针。如果statloc不是一个空指针,则终止状态就存放到它所指向的单元内