这个C代码做了什么?

kra*_*626 4 c c++ fork

我是C编程的新手,虽然我做了很多其他类型的编程.

我想知道是否有人可以向我解释为什么这个程序输出10.

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>

int value = 10;

int main()
{
    pid_t pid;

    pid = fork();
    if(pid == 0){
    value += 10;
    }
    else if(pid > 0){
        wait(NULL);
        printf("parent: value = %d\n", value); //Line A
        exit(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道输出是"parent:value = 10".谁知道为什么?

谢谢!

Sta*_*key 16

fork创建两个进程("父"和"子").在您的示例中,每个进程都有不同的pid值.子进程的pid为0.父进程有一个子操作系统pid的pid(由操作系统分配).

在您的示例中,每个进程value在其内存中都有自己的进程.它们共享内存(就像你认为它们应该通过你的问题.)如果你改变一个进程(if的第一部分),它将不会反映在第二个进程中(if的第二部分).

编辑:解释pid的值.

  • @ kralco626:这就是`fork()`的工作原理.这样,父进程将知道其子进程的确切pid(> 0),并且子进程将知道它是子进程(因为pid将返回0).请注意,子实际上*实际上没有*进程ID为0,它只是`fork()`向孩子发信号通知它实际上是子进程的方式.(对于子进程来说,获取自身及其父进程的PID也是微不足道的,因为它只有一个父进程,而父进程可能有多个子进程). (4认同)
  • fork返回的pid对于子进程为0,对于父进程大于0. (3认同)