日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux编程两个子进程,Linux中fork同时创建多个子进程的方法

發布時間:2023/12/4 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux编程两个子进程,Linux中fork同时创建多个子进程的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

怎么創建多個進程呢?我說那還不容易,看下邊代碼:

//省略必要頭文件

int main()

{

pid_t pid[2];

int i;

printf("This is %d\n",getpid());

for(i = 0;i < 2;i++ ){

if((pid[0] = fork()) < 0){

printf("Fork() Error!");

exit(-1);

}

if(pid[0] == 0)

printf("This is parent %d,child is %d\n",getppid(),getpid());

else

wait(5);

}

return 0;

}

好,這段代碼還是挺簡單的,我們的意思是:主線程通過循環創建2個子進程,這時系統中的總進程數應該是3,看看輸出結果吧:

這個結果圖看的效果不好,我們看個直接點的:

這下你明白了吧,問題沒有想象中的那樣簡單,父進程現在標號為1的循環中創了一個子進程,然后第二次循環,前邊的第一個子線程又創建一個子進程,這時明顯系統中有四個進程,還是不懂?在下邊的時序圖吧:

這下你應該明白了吧,好了問題知道了,怎么解決,方法有二;

方法一:直接看代碼? for循環

void createsubprocess(int num)

{

pid_t pid;

int i;

for(i=0;i

{

pid=fork();

if(pid==0||pid==-1)? //子進程或創建進程失敗均退出,這里是關鍵所在

{

break;

}

}

if(pid==-1)

{

perror("fail to fork!\n");

exit(1);

}

else if(pid==0)

{

printf("子進程id=%d,其對應的父進程id=%d\n",getpid(),getppid());

exit(0);

}

else

{

printf("父進程id=%d\n",getpid());

exit(0);

}

}

這種方法的關鍵就在于每次循環時,如果發現是子進程就直接從創建子進程的循環中跳出來,不讓你進入循環,這樣就保證了每次只有父進程來做循環創建子進程的工作。

方法二:直接看代碼 遞歸函數

void createsubprocess(int num,int max)

{

if(num>=max)return;

pid=fork();

if(pid<0)

{

perror("fork error!\n");

exit(1);

}

//子進程

else if(pid==0)

{

sleep(3);

printf("子進程id=%d,父進程id=%d\n",getpid(),getppid());

}

//父進程

else

{

num++;

if(num==1)printf("父進程id=%d\n",getpid());

if(num

//此處加sleep是為了防止父進程先退出,從而產生異常

sleep(5);

}

}

這里的關鍵在于遞歸操作,只有父進程才進入遞歸創建子進程,子進程不進行這樣的操作。

總結

以上是生活随笔為你收集整理的linux编程两个子进程,Linux中fork同时创建多个子进程的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。