关于wait(),waitpid()等待子进程的理解
来源:互联网 发布:快速选择算法思想 编辑:程序博客网 时间:2024/04/29 16:20
上学吧原文连接,请点击谢谢:http://www.shangxueba.com/jingyan/1868777.html
我们经常会遇到去使用wait(),waitpid()去回收子进程的资源,获取子进程的退出状态。
在waitpid中等待的时候会使用pid来指定范围,对pid指定范围中的子进程的理解,好多人都没理解好,一下是个人的一点实验心得。
1、pid四种取值中 >0 等待pid指定的子进程,这个不存在争议。但是==-1等待任一子进程的时候,考虑一个问题,子进程创建子进程了。那么这个子进程创建的子进程是不是算作-1的等待范围呢。这个不算的。
2、如果等待的市进程组呢。还是那个问题,这个子进程创建的子进程是不是算作 -pid的等待范围呢。这个也不是,还是那个问题,我们等待的是父进程直接创建的子进程。
总结:
从验证来看的话,wait的等待的子进程只能是有一种,就是调用wait或者waitpid的进程直接创建的进程我们才能称之为子进程。所以,这个要注意一下。
验证代码如下,可以通过调整每个进程的sleep时间来获取不同等待范围下waitpid的返回值来确定waitpid的等待范围,进而分析出子进程的子进程在不在这个范围之内:
/* ************************************************************************
* Filename: fork.c
* Description:
* Version: 1.0
* Created: 2014年07月14日 23时00分22秒
* Revision: none
* Compiler: gcc
* Author: YOUR NAME (),
* Company:
* ************************************************************************/
#include
#include
#include
#include
int main(int argc, char *argv[])
{
pid_t pid = fork();
if(pid == 0)
{
pid_t pid = fork();
if(pid == 0)
{
sleep(1);//可以修改这个时间让这个子进程的子进程先返回,看waitpid的返回值
printf("3333333\n");
printf("333333getpgid=%d\n",getpgid(getpid()));
return 3;
}
else if(pid >0)
{
sleep(5);//这个时间一定要比子进程等待时间长
printf("22222getpgid=%d\n",getpgid(getpid()));
printf("22222222\n");
return 2;
}
}
else if(pid >0)
{
pid_t pidx = fork();
if(pidx == 0)
{
sleep(3);//这个来验证等待任意一个子进程的。
printf("44444\n");
printf("4444444getpgid=%d\n",getpgid(getpid()));
return 4;
}
int status = 0;
sleep(1);
pid_t pgid =-getpgid(0);
printf("1111111getpgid=%d\n",pgid);
waitpid(pgid,&status,0);
if(WIFEXITED(status)!=0)
{
printf("return value =%d\n",WEXITSTATUS(status));
}
printf("1111111\n");
}
return 0;
}
- 关于wait(),waitpid()等待子进程的理解
- 关于waitpid等待子进程的实验
- 进程等待wait,waitpid
- 进程的等待(wait和waitpid)
- 父进程等待子进程结束 waitpid wait
- linux 进程等待 wait 、 waitpid
- 进程等待与wait&waitpid
- 关于wait()与waitpid()的理解
- linux下的进程等待(wait和waitpid)
- 进程环境与进程控制(3): 等待子进程wait/waitpid
- Linux--等待进程结束wait()和waitpid()
- 调用wait&waitpid来处理终止的子进程
- 不能两次使用waitpid等待一个子进程的结束
- 【Linux】回收子进程—wait/waitpid
- wait()和waitpid()的理解
- linux C进程 进程等待wait与waitpid函数
- linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid
- 进程等待示例(wait与waitpid调用)
- A计划
- 2.1.1 多数据库
- 【iOS开发】 同步请求、异步请求、GET请求、POST请求
- Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
- 咖啡连锁店岁的
- 关于wait(),waitpid()等待子进程的理解
- java开发命名规范
- Error:could not open ..\jvm.cfg
- 讲讲金融业务(二)--银行自助结算业务系统架构(A)
- http:\\dongxi.douban.com/article/1363048/
- 的说法的说法都是疙瘩是撒旦
- 深入浅出K-Means算法
- LeetCode OJ算法题(二十):Valid Parentheses
- UVA 1541 - To Bet or Not To Bet(概率递推)