fork() == 0 returns 是什么意思?
What does fork() == 0 returns?
我有 2 个程序,我对子进程中 fork() 的 return 很困惑
第一个程序将调用 fork()
并将其分配给 p
。当p == 0
时,表示子进程。
// The first program
p = fork();
if (p == 0)
{
// child process
}
else
{
// parent process or exception
}
但是如果我们只调用 fork() == 0
呢?
我会认为 fork()
return non-zero
来自 docs。
因此条件永远不会执行。
// The second program
if (fork() == 0)
{
// Would this ever be reached?
printf("A\n");
}
printf("B\n");
fork
创建一个新进程作为调用它的进程的相同副本。它返回两次。一次在原始调用者(父进程)中使用新创建的子进程的 PID and一次在新创建的子进程中使用 0.
因此,如果您这样做 if (fork() == 0) { ... }
,if 主体中的代码将 运行 在新创建的子项中。
但是不要这样做,因为父级确实需要知道子级的 PID,因为它必须 wait
为此。
fork
成功时,returns子进程的PID给父进程,子进程返回0。
失败时,父进程返回-1,不创建子进程。
errno
设置得当。
你的代码只是检查它是子进程
// The second program
if (fork() == 0)
{
// Would this ever be reached?
}
你似乎对......
// The first program
p = fork();
if (p == 0)
{
// child process
}
...,还有疑问...
// The second program
if (fork() == 0)
{
// Would this ever be reached?
printf("A\n");
}
。但是,不清楚为什么您认为对于条件的评估有任何意义的差异。
在这两种情况下,都会调用 fork()
。在第一个代码中,它的 return 值被记录在一个变量中,然后测试记录的值是否与零相等(在 parent 和 child 中,假设 fork()
成功)。在第二个代码中,直接测试 fork()
的 return 值是否与零相等,而不是在变量中捕获它。没有理由认为这会产生与第一个代码不同的比较。
是的,如果 fork()
成功,那么它将 return 在 child 进程和 non-zero 中归零(child 的进程 ID)在 parent 过程中,因此无论使用哪种形式, == 0
分支将在 child 中进行,但不会在 parent.
中进行
我有 2 个程序,我对子进程中 fork() 的 return 很困惑
第一个程序将调用 fork()
并将其分配给 p
。当p == 0
时,表示子进程。
// The first program
p = fork();
if (p == 0)
{
// child process
}
else
{
// parent process or exception
}
但是如果我们只调用 fork() == 0
呢?
我会认为 fork()
return non-zero
来自 docs。
因此条件永远不会执行。
// The second program
if (fork() == 0)
{
// Would this ever be reached?
printf("A\n");
}
printf("B\n");
fork
创建一个新进程作为调用它的进程的相同副本。它返回两次。一次在原始调用者(父进程)中使用新创建的子进程的 PID and一次在新创建的子进程中使用 0.
因此,如果您这样做 if (fork() == 0) { ... }
,if 主体中的代码将 运行 在新创建的子项中。
但是不要这样做,因为父级确实需要知道子级的 PID,因为它必须 wait
为此。
fork
成功时,returns子进程的PID给父进程,子进程返回0。
失败时,父进程返回-1,不创建子进程。
errno
设置得当。
你的代码只是检查它是子进程
// The second program
if (fork() == 0)
{
// Would this ever be reached?
}
你似乎对......
// The first program p = fork(); if (p == 0) { // child process }
...,还有疑问...
// The second program if (fork() == 0) { // Would this ever be reached? printf("A\n"); }
。但是,不清楚为什么您认为对于条件的评估有任何意义的差异。
在这两种情况下,都会调用 fork()
。在第一个代码中,它的 return 值被记录在一个变量中,然后测试记录的值是否与零相等(在 parent 和 child 中,假设 fork()
成功)。在第二个代码中,直接测试 fork()
的 return 值是否与零相等,而不是在变量中捕获它。没有理由认为这会产生与第一个代码不同的比较。
是的,如果 fork()
成功,那么它将 return 在 child 进程和 non-zero 中归零(child 的进程 ID)在 parent 过程中,因此无论使用哪种形式, == 0
分支将在 child 中进行,但不会在 parent.