wait() 与 waitpid()都是在linux 保证进程间异步中通信的常用函数
pit_t wait(int *status);pit waitpid(pid_t pid, int *status, int options);
函数返回值为本次wait子进程的pid
当所wait的进程的pid不存在时,其返回值为 -1 而不是保持阻塞
status 为输出型参数传入指针,运行后返回的为子进程的终止状态
并通过WIFEXITED、WIFSIGNALED、WEXITSTATUS这几个宏用来获取子进程的退出状态。
WIFEXITED宏用来判断子进程是否正常终止(return、exit、_exit退出)
WIFSIGNALED宏用来判断子进程是否非正常终止(被信号所终止)
WEXITSTATUS宏用来得到正常终止情况下的进程返回值的。
WIFEXITED(status);
pid 可以等待指定的pid的返回
waitpid(-1, status, 0); //任意pid 阻塞式
基本功能相同,都是在父进程中调用等待子进程返回
其依赖于子进程结束时,系统向其父进程发送SIGCHILD信号,wait就释放对父进程的阻塞
父进程调用wait函数后阻塞父进程被SIGCHILD信号唤醒然后去回收僵尸子进程在子进程结束,而父进程还未回收其PCB(进程控制块 8KB)的内存时其为僵死态若父进程没有任何子进程则wait返回错误