c++ - 如何使用 fork() 系统调用创建一级进程树?

标签 c++ c fork systems-programming

我想使用 fork() 系统调用创建一个一级进程树,如下所示 对于 n = 4 个过程

enter image description here

我已经用下面的代码试过了,但这不起作用。 (这里1是父进程的子进程)

    for(i = 0 ;i < n; i++){
    chid = fork();
    if ( chid == 0 ){
        printf("%d\n",getpid());
        while(++i < n){
            chid = fork();
            if(chid == 0){
                printf(" %d ",getpid());
                break;
            }
        }
    }
    else
        break;
} 

我该怎么做?

最佳答案

#include<stdio.h>

int main()
{
  int i;
  pid_t  pid;

  for(i=0; i<5; i++)
  {
    pid = fork();
    if(pid == 0)
      break;
  }
  printf("pid %d ppid %d\n", getpid(), getppid());
  if(pid == 0)
  {
    /* child process */
  }
}

根据讨论,这里是修改后的程序。

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

int main()
{
  int i;
  pid_t  pidparent, pid;

  if( (pidparent = fork()) == 0 )
  {
    for(i=0; i<3; i++)
    {
      pid = fork();
      if(pid == 0)
        break;
    }
    if(pid == 0)
    {
      printf("child %d parent %d\n", getpid(), getppid());
    }
  }
  else
  {
    printf("parent %d \n", pidparent);
  }
  /* printf("pid %d ppid %d\n", getpid(), getppid()); */
}

关于c++ - 如何使用 fork() 系统调用创建一级进程树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786756/

相关文章:

sql - 如何从 C 程序执行 sql 语句?

c - C语言链表去重

c - 使用管道在子进程上执行 wc 命令

c - 以下 fork 程序的输出是什么?

c++ - 链表的返回元素

c++ - 绘制到屏幕的 DC C++ 后强制屏幕重绘

c - 在C中用无符号值范围表示有符号值范围

c++ - 为什么不允许其他构造函数?

c++ - 循环构造函数

c - 通过管道 C 发送二进制数据