为了账号安全,请及时绑定邮箱和手机立即绑定

如图,为什么会反复执行该程序,次序好乱啊,没有章理?

如图,为什么会反复执行该程序,次序好乱啊,没有章理?

潇潇雨雨 2022-08-05 14:10:28
#include<stdio.h>#include<unistd.h>main(){int child_pid1,child_pid2,child_pid3;int pid,status;setbuf(stdout,NULL);child_pid1=fork(); /*创建子进程1*/if(child_pid1==0){ execlp("echo","echo","child process 1",(char *)0); /*子进程1 启动其它程序*/perror("exec1 error.\n ");exit(1);}child_pid2=fork(); /*创建子进程2*/if(child_pid2==0){ execlp("date","date",(char *)0); /*子进程2 启动其它程序*/perror("exec2 error.\n ");exit(2);}child_pid3=fork(); /*创建子进程3*/if(child_pid3==0){ execlp("ls","ls",(char *)0); /*子进程3 启动其它程序*/perror("exec3 error.\n ");exit(3);}puts("Parent process is waiting for chile process return!");while((pid=wait(&status))!=-1) /*等待子进程结束*/{if(child_pid1==pid) /*若子进程1 结束*/printf("child process 1 terminated with status %d\n",(status>>8));else{if(child_pid2==pid) /*若子进程2 结束*/printf("child process 2 terminated with status %d\n",(status>>8));else{if(child_pid3==pid) /*若子进程3 结束*/printf("child process 3 terminated with status %d\n" ,(status>>8));}}}puts("All child processes terminated.");puts("Parent process terminated.");exit(0);} 
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

1、出现不同顺序的打印信息是对的;
2、因为linux系统的进程管理程序对各个进程是分时间片调度的,顺序是随机的。
3、想要严格控制每个子进程的顺序,可以通过在不同的子进程增加延时函数或通过进程同步的互斥量/信号量来实现。

查看完整回答
反对 回复 2022-08-08
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信