bhu*_*hni 3 c linux fork process
考虑一下代码:
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
/* main --- do the work */
int main(int argc, char **argv)
{
pid_t child;
if ((child = fork()) < 0) {
fprintf(stderr, "%s: fork of child failed: %s\n",
argv[0], strerror(errno));
exit(1);
} else if (child == 0) {
// do something in child
}
} else {
// do something in parent
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是子进程开始执行的代码在哪里,即首先执行哪一行?如果它执行整个代码,它也将创建自己的子进程,并且事情会继续发生,这肯定不会发生!
如果它在fork()命令之后启动,它是如何在if语句中进行的?
执行时fork(),线程被复制到内存中.
所以有效的情况是你将有两个线程执行你发布的代码片段,但它们的fork()返回值会有所不同.
对于子线程fork()将返回0,因此if不会执行其他分支,父线程也会发生同样的事情.
当fork()被调用时,操作系统为将要生成的新线程分配一个新的地址空间,然后启动它,它们将共享相同的代码段,但由于返回值不同,它们将执行代码的不同部分(如果正确拆分,就像你的例子一样)