C言語でfork関数を使い、PIDをそれぞれ表示する以下のプログラムを作成したのですが、結果が
PARENT_PID = 4383
CHILD_PID_3 = 4386
CHILD_PID_2 = 4385
CHILD_PID_1 = 4384
という順番になり、実行順がどうも納得いきません。最初の
pid_a = fork();
で返り値に0を受け取った子プロセスが
else if(pid_a == 0){
printf("CHILD_PID_1 = %d\n",getpid());
sleep(2);
}
で引っかかって
CHILD_PID_1 = 4384
が最初に表示されると思っていたのですが、何度やっても上記の実行結果になります。
何か実行順に決まりがあるのでしょうか?
c
1#include<stdio.h> 2#include<unistd.h> 3 4int main(void){ 5 pid_t pid_a,pid_b,pid_c; 6 7 pid_a = fork(); 8 9 if(pid_a == -1){ 10 fprintf(stderr, "fork has failed.\n"); 11 sleep(2); 12 }else if(pid_a == 0){ 13 printf("CHILD_PID_1 = %d\n",getpid()); 14 sleep(2); 15 }else{ 16 pid_b = fork(); 17 if(pid_b == -1){ 18 fprintf(stderr, "fork has failed.\n"); 19 sleep(2); 20 }else if(pid_b == 0){ 21 printf("CHILD_PID_2 = %d\n",getpid()); 22 sleep(2); 23 }else{ 24 pid_c = fork(); 25 if(pid_c == -1){ 26 fprintf(stderr, "fork has failed.\n"); 27 sleep(2); 28 }else if(pid_c == 0){ 29 printf("CHILD_PID_3 = %d\n",getpid()); 30 sleep(2); 31 }else{ 32 printf("PARENT_PID = %d\n",getpid()); 33 sleep(2); 34 } 35 } 36 } 37 38 return 0; 39}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/17 07:38
2019/12/23 14:23