【问题标题】:How can i create a process tree using fork()?如何使用 fork() 创建进程树?
【发布时间】:2021-12-15 19:25:20
【问题描述】:

我必须创建一个有 3 个节点的树,这 3 个节点中的每一个也有 3 个节点。 我能够用 3 个子节点创建一个根节点,但不知道如何从根节点新创建的子节点创建 3 个子节点: 下面是我的伪代码:

int main( int argc, char * argv[]) {
    for (int i = 0; i < 4; i++) 
        if (fork() == 0)
        {
            printf("[son] pid %d from [parent] pid %d\n", getpid(), getppid());

            exit(0);
        }
    for (int i = 0; i < 4; i++)
    {
        wait(NULL);
    }
}


我是否应该在 if 条件中使用另一个循环,但这会造成混乱。蒂亚!

【问题讨论】:

  • 那不是真正的 C 代码。请显示您测试过的实际有效的 C 代码。
  • 编辑了代码!
  • 代码不完全创建3个孩子

标签: c linux process fork


【解决方案1】:

只需使用pstree 命令。

运行 2 个 shell:在第一个 shell 上使用命令 ps 获取 shell 进程 PID,然后运行代码。在另一个 shell 上,运行 pstree -p &lt;pid&gt;

这是一个简单的例子:

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

int main(int argc, char **argv, char **envp)
{
  for (int i = 0; i < 2; i++) {
        if (fork() == 0) {
            printf("%d &\n", getpid());
        }
  }
  sleep(20);
  return EXIT_SUCCESS;
}

运行 pstree 命令后的输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多