使用fork()反对子和父的增加

0v3*_*04d 1 c linux fork

我对这个小程序有问题:

    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;
}
Run Code Online (Sandbox Code Playgroud)

我增加了孩子的柜台,但在父母的柜台不增加......为什么?

谢谢大家

Yu *_*Hao 6

那是因为之后fork,父进程和子进程是不同的进程,并且它们每个都有自己的变量副本count.


unw*_*ind 5

因为父进程和子进程不在同一个进程中运行。

每个进程中变量使用的内存都不同。顺便说一下,这就是流程的要点。

如果您确实想对进程执行此操作,请查看“共享内存”;如果您只想在单个进程的内存中进行多处理,请查看“共享内存”。