【Linux基础】wait和waitpid函数

时间:2021-05-24 08:11:04
1. wait和waitpid函数说明
wait函数是用于使父进程阻塞,直到一个子进程终止或者该进程接到了一个指定的信号为止。如果该父进程没有子进程或者他的子进程已经终止,则wait就会立即返回。
waitpid函数的作用和wait一样,但它并不一定要等待第一个终止的子进程,它还有若干项,如可提供一个非阻塞版本的wait功能。实际上wait函数只是waitpid函数的一个特例。
2. wait和waitpid函数格式说明
【Linux基础】wait和waitpid函数

01.jpg (43.79 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-6 11:00 上传

【Linux基础】wait和waitpid函数

02.jpg (92.02 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

2013-6-6 11:00 上传

3. waitpid函数实例
wait函数只是waitpid函数的一个特例,所以这里只举使用waitpid函数的实例。
/*waitpid.c*/
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main()
{
pid_t result1,result2;
result1=fork();(创建新进程)
if(result1<0)
printf("fork fail\n");
else if(result1==0)
{
printf("sleep 3s in child\n ");
sleep(3); (子进程暂停3s)
exit(0);
}
else
{
/*不断地在测试子进程是否退出*/
do
{
result2=waitpid(result1,NULL,WNOHANG);
if(result2==0)(如果子进程没有退出就返回值为0)
{
printf("The child process has not exited\n");
sleep(1);
}
}while(result2==0);
if(result1==result2)
printf("The child process has exited\n");
}
}
编译运行结果为
[root@localhost waitpid]./waitpid
sleep 3s in child
The child process has not exited
The child process has not exited
The child process has not exited
The child process has exited
通过运行结果可知道父进程在没有捕获到子进程的退出信号,就会不断地循环,直到子进程退出为止,子进程不退出,waitpid返回值为0。
 
本文转载于唯C教育,【Linux基础】wait和waitpid函数
http://www.weicedu.com/forum.php?mod=viewthread&tid=114&fromuid=4
(出处: http://www.weicedu.com/)