系统中的僵尸进程都要由wait系统调用来回收.
进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。
wait(等待子进程中断或结束)
相关函数 waitpid,fork
表头文件
#include
#include
定义函数 pid_t wait (int * status)
函数说明
wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态
值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status
可以设成NULL。子进程的结束状态值请参考waitpid()。
返回值
如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno 中
例子1:
#include
#include
#include
#include
int main(void)
{
pid_t pid,pid01;
int i,status;
pid = fork();
if(pid < 0)
{
printf("create process failure! error");
exit(1);
}
else if(pid == 0)
{
printf("child process pid=%d\n",getpid());
exit(3);
}
else
{
pid01 = wait(&status);
i = WEXITSTATUS(status);
if(i != 0)
{
printf("parent process pid=%d\n",getpid());
printf("child process %d exit normally",pid01);
printf(" status=%d\n",i);
}
else
printf("the child process %d exit abnormally\n",pid01);
}
exit(0);
}
阅读(1434) | 评论(0) | 转发(0) |