我是C的新手并且了解流程。我对下面的代码实际上做了什么有点困惑,它来自维基百科,但我已经在几本书中看过它,我不确定为什么,例如,我们pid_t pid;
然后{{1 }}。我的阅读似乎暗示子进程返回pid = fork();
pid
,但是,我认为原始进程的父进程在看到一棵树之后会保留0
pid
根为0
。
例如,pid 0
对父母做了什么?对于孩子来说,它不会做同样的事情吗?并且pid = fork();
不会将它放入循环中,因为它会为每个孩子执行此操作吗?
基本上,有人可以向我解释每一步,就好像我是五个人一样吗?也许更年轻?谢谢!
pid = fork();
答案 0 :(得分:3)
执行fork()函数后,您有两个进程,它们都在fork调用后继续执行。这两个进程之间的唯一区别是fork()的返回值。在原始进程中,“父”,返回值是子进程的id(pid)。在新的克隆过程中,“子”,返回值为0。
如果你不测试fork()的返回值,那么两个进程都将完全相同。
注意:要理解fork()函数有用的原因,你需要阅读exec()函数正在做的事情。此函数从磁盘加载新进程,并用新进程替换调用进程。 fork()和exec()的组合实际上是启动不同进程的方法。
答案 1 :(得分:2)
成功完成后,fork()
(source):
你给出的例子很好解释。但是,我想确切地说,两个进程(父进程和子进程)将继续从fork()
函数执行。
如果您想知道孩子的PID(来自孩子的代码),请使用getpid
API。
答案 2 :(得分:1)
fork
是一个返回两次的函数 - 一次为父级,一次为子级。
对于孩子,它返回0
,父母的孩子的pid,任何正数;对于这两个进程,在fork之后继续执行。
子进程将在else if (pid == 0)
块中运行,而父进程将运行else
块。