多进程问题
int main(void)
{
pid_t cpid;
cpid = fork();
if (cpid == -1){
perror("[ERROR] fork(): ");
exit(EXIT_FAILURE);
}else if(cpid == 0){
printf("The ChildA process < %d > running...\n",getpid());
sleep(2);
exit(88);
}else if(cpid > 0){
cpid = fork();
if (cpid == -1){
perror("fork(): ");
}else if (cpid == 0){ // second process
printf("The childB process < %d > running...\n",getpid());
sleep(2);
exit(99);
}else if (cpid > 0){
int status,rpid=0;
rpid=wait(&status);
if (rpid == -1){
perror("[ERROR] wait() : ");
exit(EXIT_FAILURE);
}
printf("The Child Process < %d > has exited,exit code < %d >.\n",rpid,WEXITSTATUS(status));//通过 WEIXTSTATUS() 宏定义获取
rpid=wait(&status);
if (rpid == -1){
perror("[ERROR] wait() : ");
exit(EXIT_FAILURE);
}
printf("The Child Process < %d > has exited,exit code < %d >.\n",rpid,WEXITSTATUS(status));//通过 WEIXTSTATUS() 宏定义获取
}
}
return 0;
}
老师这个代码执行的顺序是怎么样的呢,是先创建了子进程A还是子进程B,然后wait回调的时候是进程B先回来还是B进程先回来,还是说是随机的
2
收起
正在回答
1回答
根据fork函数的返来分析就行,fork之后就两个进程了,返回值大于0,父进程满足条件,父进程执行大于0里面的代码。等于0,子进程满足条件,子进程执行等于0里面的代码。这段代码,是父进程先创建了一个子进程A,让后接着创建了一个子进程B,接着等待子进程退出。A和B两个子进程谁会先退出,看他们的睡眠时间,睡眠时间到了就退出了!
物联网/嵌入式工程师
- 参与学习 394 人
- 提交作业 22954 份
- 解答问题 1164 个
行业热门,政策风口,人才缺口极大,现在入场时机正好! 上千人检验,数轮迭代的硬核知识体系,软硬件通吃 保姆式教学+简历指导+1V1模拟面试+3次内推,助力轻松就业!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星