#include<stdio.h>#include<unistd.h>main(){int child_pid1,child_pid2,child_pid3;int pid,status;setbuf(stdout,NULL);child_pid1=fork(); /*創(chuàng)建子進(jìn)程1*/if(child_pid1==0){ execlp("echo","echo","child process 1",(char *)0); /*子進(jìn)程1 啟動(dòng)其它程序*/perror("exec1 error.\n ");exit(1);}child_pid2=fork(); /*創(chuàng)建子進(jìn)程2*/if(child_pid2==0){ execlp("date","date",(char *)0); /*子進(jìn)程2 啟動(dòng)其它程序*/perror("exec2 error.\n ");exit(2);}child_pid3=fork(); /*創(chuàng)建子進(jìn)程3*/if(child_pid3==0){ execlp("ls","ls",(char *)0); /*子進(jìn)程3 啟動(dòng)其它程序*/perror("exec3 error.\n ");exit(3);}puts("Parent process is waiting for chile process return!");while((pid=wait(&status))!=-1) /*等待子進(jìn)程結(jié)束*/{if(child_pid1==pid) /*若子進(jìn)程1 結(jié)束*/printf("child process 1 terminated with status %d\n",(status>>8));else{if(child_pid2==pid) /*若子進(jìn)程2 結(jié)束*/printf("child process 2 terminated with status %d\n",(status>>8));else{if(child_pid3==pid) /*若子進(jìn)程3 結(jié)束*/printf("child process 3 terminated with status %d\n" ,(status>>8));}}}puts("All child processes terminated.");puts("Parent process terminated.");exit(0);}
1 回答

繁星淼淼
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
1、出現(xiàn)不同順序的打印信息是對(duì)的;
2、因?yàn)閘inux系統(tǒng)的進(jìn)程管理程序?qū)Ω鱾€(gè)進(jìn)程是分時(shí)間片調(diào)度的,順序是隨機(jī)的。
3、想要嚴(yán)格控制每個(gè)子進(jìn)程的順序,可以通過在不同的子進(jìn)程增加延時(shí)函數(shù)或通過進(jìn)程同步的互斥量/信號(hào)量來實(shí)現(xiàn)。
添加回答
舉報(bào)
0/150
提交
取消