我正在尝试学习UNIX编程,并且遇到了有关fork()的问题。我知道fork()创建的进程与当前正在运行的进程相同,但是它从哪里开始?例如,如果我有代码
int main (int argc, char **argv)
{
int retval;
printf ("This is most definitely the parent process\n");
fflush (stdout);
retval = fork ();
printf ("Which process printed this?\n");
return (EXIT_SUCCESS);
}
输出为:
这绝对是父进程,
哪个进程打印了此文件?
哪个过程印出了这个?
我以为会fork()
创建一个相同的过程,所以我最初认为在该程序中,该fork()
调用将被永久递归调用。我猜是从通话fork()
后开始创建的新流程fork()
?
如果我添加以下代码,以区分父进程和子进程,
if (child_pid = fork ()) printf ("This is the parent, child pid is %d\n", child_pid);
else printf ("This is the child, pid is %d\n",getpid ());
在fork()调用之后,子进程将从哪里开始执行?
man fork
肯定可以回答您的问题,顺便说一句