#include <stdio.h>
int num = 0;
int main(int argc, char*argv[]){
int pid;
pid = fork();
printf("%d", num);
if(pid == 0){ /*child*/
num = 1;
}else if(pid > 0){ /*parent*/
num = 2;
}
printf("%d", num);
}
可能な出力が0102または0012または0201または0021になる理由を理解するのに問題があります。
これが私が(考えて)作成すべきものです。これは最初のprintfステートメントにヒットし、どの子または親が最初に実行されても、numは変更されていないため、最初に0になります。次に、nextは1または2のいずれかであり、次のプロセスが実行されるため、再び0(親からコピー)で開始し、次に1または2のいずれかで開始します。したがって、可能な出力は次のようになります。
0101または0102または0201または0202