亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如圖,為什么會反復執行該程序,次序好亂啊,沒有章理?

如圖,為什么會反復執行該程序,次序好亂啊,沒有章理?

瀟瀟雨雨 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 關注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號