fork_rv返回什么
What does the fork_rv return?
我知道fork((创建了一个重复的过程(克隆(,这意味着创建了两个相同的地址空间副本 - 一个适用于父母,一个用于孩子。此过程成为呼叫者的子过程。但是,我对fork_rv中的内容感到困惑(请参阅下面的代码中的评论(
include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
int fork_rv;
printf("Before: my pid is %dn",getpid());
fork_rv=fork();
if (fork_rv == -1)
perror("fork");
else if (fork_rv == 0)
printf ("I am the child. my pid=%dn",getpid());
else
printf ("I am the parent. my child is %dn",fork_rv); /* What is inside fork_rv What gets printed exactly? The address of the child?) */
}
fork
的Linux手册页引用:
成功,父母返回子程序的pid,并且 0在孩子中返回。失败时,-1在父母中返回,没有创建子过程,并且errno设置了适当的设置。
而 @brian的答案已经正确,也许解释这些返回值背后的逻辑使得更容易理解:
- -1对于错误,应清楚。
- 0作为子过程的价值是有意义的,因为子过程始终可以获得自己的pid(
getpid()
(以及其父过程的pid(getppid()
(。 - 所有值> 0是创建的新子进程的PID,返回到父进程。
由于一个过程可以具有多个子进程,因此不可能具有" get Child pid"功能:PID应该回来哪个孩子?并有了"获得儿童pids"功能,该功能将返回所有儿童流程pids的列表,找到最新的新儿童过程的pid会很麻烦。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我可以使用什么来停止循环而不是"返回 0"?
- 这个返回元素位置的基于循环的函数有什么问题?
- 查找不存在的键时,unordered_map返回什么
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- 如果我在 const 函数上使用指针,我可以返回什么?
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 什么 /可以/ 你从一个函数返回. 并期望它在到达时还活着?
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 返回引用实例和非引用实例(return mystr & vs mystr)之间的区别是什么?
- 我应该返回什么而不是标准::shared_ptr<>&?
- 返回类型在 C++ OOP 中是什么意思
- 什么 & 返回左值或右值?
- 实际上什么返回类型有一个新的
- 链表缓冲区;应该插入什么返回
- 指针赋值应该使用什么返回类型?