创建新流程

时间:2014-07-30 08:15:49

标签: c process fork

我正在通过分叉创建新流程:

printf("original process = %d\n", getpid());
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());
if(fork() == 0){
        printf("parent = %d; child = %d\n", getpid(), getppid());
        if(fork() == 0){
                    printf("parent = %d; child = %d\n", getpid(), getppid());
        }    
}
fork();
printf("parent = %d; child = %d\n", getpid(), getppid());

我想打印出我创建的进程数。我上面看到的方法并不是打印创建了多少进程的最佳方法。所以我的问题是:我们如何打印每次分叉时创建了多少新进程而没有某种循环?

2 个答案:

答案 0 :(得分:1)

每次成功调用fork都会创建一个新进程,父进程和子进程都从fork()返回。孩子将得到0作为回报,父母得到孩子的PID。

printf("I am the root %d\n", getpid());
if (fork() == 0)
    printf("I am %d, child of %d\n", getpid(), getppid());
if (fork() == 0)
{
    printf("I am %d, child of %d\n", getpid(), getppid());
    if (fork() == 0)
        printf("I am %d, child of %d\n", getpid(), getppid());
}
if (fork() == 0)
    printf("I am %d, child of %d\n", getpid(), getppid());

等等......

您的代码中的问题是您在某些情况下打印文本而未检查fork()的返回值,因此这些行将由父级和子级打印。使用我的代码,每个进程在创建时只打印一行。

答案 1 :(得分:0)

当每个人创建/生成子进程时,
基于fork()的调用顺序 共创建了24个子进程,这就是它的完成方式

  

1st fork(); ( 4 更多fork()调用)
  第2个分叉(); ( 3 更多fork()调用)
   3st fork(); ( 2 更多fork()调用)
  第4个分叉(); ( 1 更多fork()调用)

因此,子进程的总数将 4! - 1 ,即 4x3x2x1 = 24 - 1
创建了23个子进程