wait和waitpid函数

来源:互联网 发布:淘宝店刷钻是真的吗 编辑:程序博客网 时间:2024/05/29 10:27

一、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


0 0
原创粉丝点击