【问题标题】:C++ fork(), multi-threading and OS's conceptsC++ fork()、多线程和操作系统的概念
【发布时间】:2017-01-23 18:37:46
【问题描述】:

今天,我用 C++ 写了一个小程序,如下所示:

pid_t pChild=0;
printf("Main process ID:%d\n",getpid());
pChild= fork();
printf("%d\n",pChild);
if (pChild!=0){ 
  printf("Parent process ID:%d\n",getpid());
  printf("Child process ID:%d\n",pChild);
}
else printf("Sorry! The child can not be created\n");

return 0;

输出是这样的

主进程ID:3140

对不起!无法创建孩子

父进程 ID:3140

子进程 ID:3141

然后,我想知道输出。

我猜想子进程的第一个 getpid() 没有运行,因为它使用 getpid() 从其父进程读取相同的数据;还有这个味精

对不起!无法创建孩子

它必须来自子进程的if语句。如果我错了,请纠正我...

但是我还是不明白为什么孩子的 fork() 函数没有运行。为什么被屏蔽了?是不是因为他们读取了相同的 pChild 数据(其中一个是子进程的 fork(),另一个是主进程的 if 语句)?

谁能解释更多关于它的细节?谢谢。

【问题讨论】:

    标签: c++ multithreading operating-system fork


    【解决方案1】:

    来自fork() documentation

    返回值

    成功完成后,fork() 将返回 0 给子进程 并将子进程的进程ID返回给父进程。

    您的代码假定任何 返回值都是错误。

    继续:

    两个进程都应从 fork() 函数继续执行。 否则,-1 应返回父进程,没有子进程 应创建进程,并应设置 errno 以指示 错误。

    -1 返回值是一个错误指示。

    【讨论】:

    • 我现在明白了,很好的解释。谢谢。
    猜你喜欢
    • 2016-12-14
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多