通过C中的fork()创建子进程

时间:2013-04-05 13:18:55

标签: c process parent-child fork

我是C的新手并且了解流程。我对下面的代码实际上做了什么有点困惑,它来自维基百科,但我已经在几本书中看过它,我不确定为什么,例如,我们pid_t pid;然后{{1 }}。我的阅读似乎暗示子进程返回pid = fork(); pid,但是,我认为原始进程的父进程在看到一棵树之后会保留0 pid根为0

例如,pid 0对父母做了什么?对于孩子来说,它不会做同样的事情吗?并且pid = fork();不会将它放入循环中,因为它会为每个孩子执行此操作吗?

基本上,有人可以向我解释每一步,就好像我是五个人一样吗?也许更年轻?谢谢!

pid = fork();

3 个答案:

答案 0 :(得分:3)

执行fork()函数后,您有两个进程,它们都在fork调用后继续执行。这两个进程之间的唯一区别是fork()的返回值。在原始进程中,“父”,返回值是子进程的id(pid)。在新的克隆过程中,“子”,返回值为0。

如果你不测试fork()的返回值,那么两个进程都将完全相同。

注意:要理解fork()函数有用的原因,你需要阅读exec()函数正在做的事情。此函数从磁盘加载新进程,并用新进程替换调用进程。 fork()和exec()的组合实际上是启动不同进程的方法。

答案 1 :(得分:2)

成功完成后,fork()source):

  • 将0返回子进程
  • 并将子进程的进程ID返回给父进程。

你给出的例子很好解释。但是,我想确切地说,两个进程(父进程和子进程)将继续从fork()函数执行。

如果您想知道孩子的PID(来自孩子的代码),请使用getpid API

答案 2 :(得分:1)

fork是一个返回两次的函数 - 一次为父级,一次为子级。

对于孩子,它返回0,父母的孩子的pid,任何正数;对于这两个进程,在fork之后继续执行。

子进程将在else if (pid == 0)块中运行,而父进程将运行else块。