一、wait函数
代码:
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t id = fork();
if(id == 0){
printf("child:pid:%d,ppid:%d\n",getpid(),getppid());
sleep(10);
exit(3);
}else{
printf("This is a father\n");
int status = 0;
pid_t dead_id = wait(&status);//父进程等待子进程退出,即使父进程先运行完,也会等待子进程运行完
if(dead_id == -1){
perror("error");
}else{
printf("dead_id:%d\n",dead_id);
printf("child exit code:%d\n",(status>>8)&0xff);
//printf("child exit code:%d\n",WEXITSTATUS(status));
printf("child get signal:%d\n",status&0xff);
//printf("child get signal:%d\n",WIFEXITED(status));
}
}
return 0;
}
运行结果:
二、wait函数
代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t id = fork();
if(id == 0){
printf("child:pid:%d,ppid:%d\n",getpid(),getppid());
sleep(10);
exit(3);
}else{
printf("This is a father\n");
int status = 0;
pid_t dead_id = waitpid(id,&status,0);//父进程等待子进程退出
if(dead_id == -1){
perror("error");
}else{
printf("dead_id:%d\n",dead_id);
printf("child exit code:%d\n",(status>>8)&0xff);
//printf("child exit code:%d\n",WEXITSTATUS(status));
printf("child get signal:%d\n",status&0xff);
//printf("child get signal:%d\n",WIFEXITED(status));
}
}
return 0;
}
运行结果:
三、总结:
wait提供的是阻塞版本
waiptpid提供了wait没有提供的三个功能:
1. waitpid可等待一个特定的进程
2. waitpid提供了一个wait的非阻塞版本
3. waitpid支持作业控制
两者返回值:成功返回被等待进程pid,失败返回-1