wait()函数用于使父进程(也就是调用wait()嘚进程)阻塞直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果该父进程没有子进程或者它的子进程已经结束则wait()就會立即返回。 waitpid()的作用和wait()一样但它并不一定要等待第一个终止的子进程,它还有若干选项如可提供一个非阻塞版本的wait()功能,也能支持作業控制实际上,wait()函数只是waitpid()函数的一个特例在Linux内部实现wait()函数时直接调用的就是waitpid()函数。
由于wait()函数的使用较为简单在此仅以waitpid()为例进行讲解。本例Φ首先使用fork()创建一个子进程然后让其子进程暂停5s(使用了sleep()函数)。接下来对原有的父进程使用waitpid()函数并使用参数WNOHANG使该父进程不会阻塞。若有子进程退出则waitpid()返回子进程号;若没有子进程退出,则waitpid()返回0并且父进程每隔1s循环判断一次。该程序的流程图如图1所示 可见,该程序在经过5次循环后捕获到了子进程的退出信号,具体的子进程号在不同的系统上会有所区别 |