【发布时间】:2019-07-06 15:44:43
【问题描述】:
我对 fork() 的理解是,一旦它创建了子进程,它就对我们到达“fork()”之前存在的代码一无所知。 但是在具有多个 fork() 的 if 语句中,似乎子进程正在执行参数计算,即使它出现在它的 fork() 创建者之前。
例如:
int main ()
{
if((fork())==(fork()))
printf ("Hello.\n");
printf ("Bye.\n");
return 1;
}
将有包括父亲在内的4个进程的总和。在由另一个子进程创建的子进程(我将其称为 d)中,创建我们的 d 进程的 fork() 是 if 语句中的第二个 fork()。
尽管第一个 fork() 对 d 不熟悉,但我的理解是 d 进程计算出 0==0 并打印“Hello”(输出肯定是正确的)。我有两个问题:
1.d 进程是如何到达创建这个 d 进程(第二个)的 fork() 之前的 if 语句中的第一个 fork() 的?
2.为什么我们在 d 进程中的第一个 fork() 等于 0,如果它只发生在由这个特定的 fork()(d 的父亲)创建的子进程中?
【问题讨论】:
-
“一旦它创建了子进程,它就对我们到达'fork()'之前存在的代码一无所知” 为什么/如何?你能更详细地解释你的信念吗?
-
我的理解是子进程应该开始在fork()之后的代码上运行,我认为它不应该对它之前的代码做任何事情..
-
进程已被克隆。它在内存中具有相同数据的同一程序中的同一点(
fork()调用的返回值除外)。为什么它的历史将不可用,那么它如何能够在新进程中继续执行该程序?它会做什么? -
这是非常可靠的观点,我只是在学习这个对我来说是新的主题