linx c fork()函式的多層巢狀
阿新 • • 發佈:2018-12-15
有哪些巢狀問題呢?
1)建立多個程序分別做一樣的事
程式碼案例:
#include <stdio.h> #include <unistd.h> int main(int arg,char* argv[]){ // 設定fork返回值 pid_t pid; // 建立多個子程序,childNum為子程序個數 for(int i = 0,childNum = 2;i < childNum;i++){ pid = fork(); // 是父程序 continue ,for()五次,若是子程序,break該for迴圈,即子程序無需經歷for迴圈 if(pid==0 || pid<0) break; } if(pid < 0){ printf("ERROR:fork child process failure\n"); } // 子程序迴圈體 else if(pid == 0){ printf("create sub process id: %d, parent id: %d\n", getpid(), getppid()); // pause 子程序進入睡眠,即阻塞住所有子程序,直到被訊號(signal)所中斷. //while(1) pause(); } // 父程序執行體 else{ sleep(1); printf("Parent process %d sleep 1 s\n", getpid()); sleep(1); } return 0; }
結果:
2)建立多個程序分別做不一樣的事
程式碼案例:
#include <stdio.h> #include <unistd.h> int main(int arg,char* argv[]){ pid_t pid = fork(); if(pid < 0){ //fork失敗 printf("fork error\n"); }else if(0 == pid){ //fork後的子程序的執行體 //父程序的子程序建立子程序,即父程序的孫程序 pid = fork(); if(pid < 0){ printf("fork error\n"); }else if(0 == pid){ // 孫程序執行體 printf("sun process is run,processid is %d ,my parentprocess is %d\n",getpid(),getppid()); }else{ // 子程序執行體 sleep(1); printf("child process is run,processid is %d ,my parentprocess is %d\n",getpid(),getppid()); } }else{ //父程序的執行體 sleep(1); printf("Parent process is run,processid is %d \n",getpid()); sleep(1); } return 0; }
執行結果: