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同时创建多个子进程的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中显示目录名,在linux下显
- 下一篇: linux进程的高级管理,Linux高级