#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、想要嚴格控制每個子進程的順序,可以通過在不同的子進程增加延時函數或通過進程同步的互斥量/信號量來實現。
- 1 回答
- 0 關注
- 195 瀏覽
添加回答
舉報
0/150
提交
取消