linux进程编程(二)-- waitpid()函数使用
来源:互联网 发布:花呗淘宝套现点了收货 编辑:程序博客网 时间:2024/06/01 07:51
函数简介
函数原型
#include <sys/types.h>#include <sys/wait.h>pid_t waitpid(pid_t pid, int *status, int options);
描述 waitpid()
会挂起调用的进程,直到由参数pid
指定的子进程状态改变,一默认情况下,只等待子进程的退出,可以通过options
参数进行修改。
参数 pid
- 进程的pid,pid的取值不同实际意义也会不同: < -1
等待进程组中的任何子进程退出,进程组的ID为pid的绝对值 -1
等待任何子进程,此时与wait函数的作用相同(常用) 0
等待与调用进程为同一进程组的任何子进程退出 > 0
等待进程ID为pid的子进程退出
status
- 如果不为NULL,则存储状态信息,常用值(详细请参考man waitpid): WIFEXITED(status)
返回true如果进程正常退出,也就是说调用exit或main函数退出 WEXITSTATUS(status)
获取子进程的退出信息,只有在WIFEXITED返回true时有效 WIFSIGNALED(status)
返回true如果进程被信号终端 WTERMSIG(status)
获取引起子进程退出的信号值,只有在WIFSIGNALED返回true时有效
options
- 可以为0,或以下选项的逻辑组合: WNOHANG
即使没有子进程退出,也会立即返回 WUNTRACED
子进程被挂起是也会返回 WCONTINUED
子进程被恢复是也会返回
返回值
返回状态改变的子进程的pid,如果设置了WNOHANG
选项则如果当前没有退出的子进程可收集的时候返回0,如果错误则返回-1。
实例
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#define CREATE_PROCESS_CNT 5int main(void){ pid_t pid; int i; int status; for(i = 0; i < CREATE_PROCESS_CNT; i++) { pid = fork(); switch(pid) { case -1: /*error*/ perror("fork"); exit(1); break; case 0: /*child*/ printf("I am child, exit status:%d pid:%d ppid:%d\n", i, getpid(), getppid()); exit(i); break; default: /*parent*/ break; } } sleep(1); //make sure all children had exited, before. i = 0; for( ;; ) { pid = waitpid(-1, &status, WNOHANG); if(pid == 0) { /* no child*/ printf("no child to be waited\n"); sleep(1); } if(pid > 0) { printf("collected child pid[%d] exit status is %d\n", pid, WEXITSTATUS(status)); i++; if(i == CREATE_PROCESS_CNT) { printf("all children had exited\n"); exit(0); } } if(pid == -1) { perror("waitpid"); exit(1); } } return 0;}
0 0
- linux进程编程(二)-- waitpid()函数使用
- linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
- linux系统编程之进程(四):wait/waitpid函数与僵尸进程、fork 2 times
- Linux进程 -- wait/waitpid函数
- Linux系统进程控制编程(六)——wait和waitpid函数
- linux进程(fork,waitpid)
- linux进程(fork,waitpid)
- linux进程(fork,waitpid)
- linux c (5) 进程同步-waitpid函数
- linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid
- Linux系统进程控制编程——wait和waitpid函数
- Linux系统编程——僵尸进程及wait/waitpid函数
- 【Linux编程】wait和waitpid函数
- 进程编程中的孤儿和僵尸进程--wait/waitpid函数
- 进程函数 fork waitpid
- linux C进程 进程等待wait与waitpid函数
- Linux进程学习(五)之函数waitpid函数的解析
- 网络编程(12)—— 利用wait和waitpid函数消毁僵尸进程
- tar命令的基本用法
- Bat 语法
- (2016多校联赛)hdu 5763 Another Meaning
- metalb量化投资代码 看的不太懂,一行行猜测吧
- MyBatis——【二级缓存】
- linux进程编程(二)-- waitpid()函数使用
- float的范围和有效数字怎么算出来的?
- Coderforces 348A
- 总结下Android相关的Intent启动
- 共用体
- Hadoop自定义排序和自定义数据类型使用(setSortComparatorClass和setGroupingComparatorClass)
- HDU 2087 剪花布条 [KMP]
- DOM动态创建元素 有兼容性问题li a
- 加盐密码哈希:如何正确使用 (转)