2016-11-19 13 views
-2

I 2つのプロセスを作成したいとフォークで1親プロセス()fork()を使ってLinuxで子プロセスを作成する方法と、2つの方法が異なる方法を知りたいですか?

最初の方法:

#include<stdio.h> 
#include<unistd.h> 
#include<sys/types.h> 
int main(void){ 
    pid_t b,c; 
     printf("a"); 

    if(0 == (b = fork())){ 
      printf("b"); 
    } 
    if(0 == (c = fork())){ 
      printf("c"); 
    } 
    return 0; 
} 

第二の方法:これらのコードを実行した後

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
int main(int argv,char ** argc){ 
    pid_t fpid1,fpid2; 
    fpid1 = fork(); 
    if(fpid1 == 0){ 
     printf("b"); 
    }else{ 
     fpid2 = fork(); 
     if(fpid2 == 0){ 
      printf("c"); 

     }else{ 
      printf("a"); 

     } 
    } 
    return 0; 
} 

、私が見つけました答えは異なる 最初は

a 
b 
c 

2番目は ランダム

iは忘れてしまったfpid2 = fork();ごめんなさい!! は私

+1

おそらく混同以下で

第スニペットプリントを、(stdoutを仮定すると、ラインバッファリングされます)これらの「ランダム」出力の1つを表示するのはどうですか? – alk

+0

1番目のスニペットで表示される出力が不完全です。 – alk

答えて

2

に最初のプログラムforkの二回が、2番目のものを助けてください - 一度だけ、fpid_2がunititialized残るように、したがって、未定義の動作(ランダムは、あなたが話をしています)。

+0

おっと、私は –

+0

のためにフォークを追加するのを忘れていたので、fpid_2のフォークを追加すると、これらのコードの違いは –

+1

@ShawnLiu、 'if'sはコードの2番目の部分に入れ子になっています。そうではありません – ForceBru

0

メインプロセスの他に、第1のスニペットは3つのプロセスを作成します.2番目のスニペットは2つだけです。

a 
ab 
ac 
abc 

2出力、おそらく同様に混同:

b 
c 
a 
関連する問題