1

私はこの小さなプログラムに問題があります:

    int main() {

  pid_t process;
  int count= 0;

  switch(process= fork()) {

    case -1:
      printf("Fork error!\n\n");
      exit(1);
    break;

    case 0: //child
      printf("Process CHILD: PID= %d, Value= %d \n", getpid(), process);
      printf("Coounter NOT increased: %d\n", count);
      printf("Increase counter...\n");
      sleep(2);
      count= count + 2;
      printf("Counter increased: %d\n\n", count);
      exit(0);
    break;

    default: //parent
      wait(0);
      printf("Process PARENT: PID= %d, Value= %d\n", getpid(), process);
      printf("Counter value: %d\n\n", count);
    break;
  }
  return 0;
}

子のカウンターを増やしますが、親のカウンターは増えません...なぜですか?

みんなありがとう

4

5 に答える 5

2

fork を実行すると、新しい子プロセスが作成されます。新しい子プロセスには、独自のメモリ、スタック、ローカル/グローバル変数スペースがあります。

両方のプロセスは、fork が呼び出された同じポイントから実行を開始しますが、メモリ空間が異なります。そのため、あるプロセスのメモリの変更は他のプロセスには反映されません。

2 つのプロセス間で同じメモリを使用する場合は、共有メモリを使用できます。

別のアプローチは、変数値を子プロセスから標準出力ストリームにリダイレクトし、親プロセスから読み取ることです。

于 2013-07-02T11:27:58.223 に答える
0
#include <stdio.h>
#include <stdlib.h>

int count= 0;

int main() {

  pid_t process;


  switch(process= fork()) {

    case -1:
      printf("Fork error!\n\n");
      exit(1);
    break;

    case 0: //child
      printf("Process CHILD: PID= %d, Value= %d \n", getpid(), process);
      printf("Coounter NOT increased: %d\n", count);
      printf("Increase counter...\n");
      sleep(2);
      count= count + 2;
      printf("Counter increased: %d\n\n", count);
      exit(0);
    break;

    default: //parent
      wait(0);
      printf("Process PARENT: PID= %d, Value= %d\n", getpid(), process);
      printf("Counter value: %d\n\n", count);
    break;
  }
  return 0;
}
于 2016-03-14T07:38:28.297 に答える