0
なぜ22行目の印刷結果が3ではなく1になるのですか? count
はグローバル変数で、handlerAで既に変更されています。なぜ21行目と22行目にその値を保持しなかったのですか?フォークとグローバル変数との混乱
1 pid_t pid;
2 int count = 0;
3
4 void handlerA(int sig) {
5 count += 2
6 printf("count = %d\n", count);
7 fflush(stdout);
8 kill(pid, SIGUSR1);
9 }
10
11 void handlerB(int sig) {
12 count += 3;
13 printf("count = %d\n", count);
14 fflush(stdout);
15 exit(0);
16 }
17
18 int main() {
19 signal(SIGUSR1, handlerA);
20 if ((pid = fork()) == 0) {
21 count++;
22 printf("count = %d\n", count);
23 fflush(stdout);
24 signal(SIGUSR1, handlerB);
25 kill(getpid(), SIGUSR1);
26 while (1) {};
27 }
28 else {
29 wait();
30 count += 4;
31 printf("count = %d\n", count);
32 fflush(stdout);
33 }
34 return 0;
35 }
"既に変更されています"どのように? – Ryan
はすでに2でインクリメントされています – stumped
おそらく 'man 2 fork'" *子プロセスと親プロセスは別々のメモリ空間で実行されます* "つまり、" *子プロセスは親プロセスの正確な複製です。 。* "が作成されますが、別のメモリ空間に作成されます。したがって、フォーク時にグローバルの値を継承しますが、それ以降は他のプロセスによって更新されません。 –