Wait (Unix)

wait（意指“等待”）为类UNIX操作系统系统调用。

 功能 

多进程系统内的进程（或任务）有时需要等待其他进程以完成自己的执行过程，而在包含父-子进程机制的类UNIX系统中，父进程能创建可独立运行的子进程，并在需要时调用wait（函数声明为pid_t wait(int *stat_loc)）以使自己在子进程执行过程中保持休眠状态。当任一子进程结束后，该子进程会向操作系统返回一个退出状态，而后系统即向休眠中的父进程发送一个SIGCHLD信号以提醒之，至此父进程“复苏”并从内核获取子进程的退出状态，而后内核释放原有子进程所占用的资源，父进程也继续执行。

 衍生 

对于带有线程机制的类UNIX系统来说，对于线程调度也有对应wait的实现：pthread_join会让当前进程强制休眠，等待指定线程执行完毕后再继续执行。

类UNIX系统还提供多种wait的衍生调用（如waitpid和waitid）以扩展适用范围。借助于这些变种，父进程可以休眠至任一子进程结束，也可以等待满足指定条件（如匹配给定的进程标识符）的子进程结束后再继续执行。另外，若利用额外选项做参数，waitpid和waitid在指定进程继续运行或暂停执行时也会返回。

 僵尸进程 

即使没有提前调用wait，在任一进程终止后，系统内核都会向其父进程发送SIGCHLD，这时父进程可以选择使用SIG_IGN作为处理函数，令内核知晓自己不需获得状态，并直接交由init进程处理；亦可调用wait，则立即返回子进程退出状态。若两者皆不做，则子进程在进程表中占用的资源就无法得到释放，进而成为僵尸进程，持续浪费资源。为解决这一问题，系统常以特殊进程reaper（“收割者”）定位僵尸进程，并获取其状态以使系统可以解除资源分配，从而“收割”之。

 参见 


 fork (操作系统)


 wait (Shell)


 参考来源 

Category:进程
Category:Unix