【问题标题】:Detecting child process creation in fork()在 fork() 中检测子进程的创建
【发布时间】:2017-03-06 16:56:44
【问题描述】:

fork() 系统调用会生成两个相同的地址空间副本,一个用于父级,另一个用于子级。

在if语句中使用fork时,下面的代码会创建多少次子进程?

fork();
pid=fork();
if(pid==0)
{
fork();
}

【问题讨论】:

  • 五次。需要进一步解释吗?
  • “制作两个相同的地址空间副本” - 不,它没有。它制作了一个已经存在的地址空间的相同副本。在大多数现代实现中,它甚至不这样做 - 它只是创建一个新的地址空间,该地址空间引用与原始页面相同的所有页面,但将它们标记为写时复制。

标签: c++ unix fork


【解决方案1】:

添加一些额外的代码以获得类似:

#include <stdio.h>
#include <unistd.h>

int main()
{
    pid_t pid;
    pid = fork();
    if (pid != 0) printf("%d\n", pid);
    pid = fork();
    if (pid != 0) printf("%d\n", pid);
    if(pid==0)
    {
        pid = fork();
        if (pid != 0) printf("%d\n", pid);
    }
    return 0;
}

然后编译、执行并检查其输出:5 个子进程 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多