在linux中处理fork

Mar*_*ang -1 c fork

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

int main(){ 
pid_t pid;
int num_coconuts = 17;
pid = fork();

if(pid == 0) { 
    num_coconuts = 42; 
    exit(0); 
} else { 
    wait(NULL);  }
}

printf("I see %d coconuts!\n", num_coconuts);
exit(0);
}
Run Code Online (Sandbox Code Playgroud)

结果是"我看到了17个椰子".为什么当pid == 0时num_coconuts没有改变?

dte*_*ell 5

让我们观察一下你的代码做了什么:

  1. 你设定num_coconuts = 17.
  2. 你分叉并获得一个新的过程.
  3. 您检查进程是否是子进程(pid == 0)或者它是父进程(pid != 0).
  4. 在您设置的子进程中num_coconuts = 42,然后立即退出.
  5. 你打印 num_coconuts

正如您所看到的,您的子进程永远不会达到5.因为您在步骤4中退出.删除exit()并且您将获得两个椰子.

  • @MartinHoang - 不,不会.它将打印两次.对于父母和孩子. (3认同)