这段伪代码创建了多少个进程?

问题描述 投票:0回答:1

嘿伙计们,我的一个操作系统类遇到了一个问题,它问我这个伪 C 代码在 Linux 中生成了多少个进程。谢谢我还在学习

n=72
int pid[n]; /* asume the content its inicialice in 0 */
int i;
for ( i = 0 ; i < n ; i++ ){  
    pid[i] = fork()
    if ( childpid == 0 ) { 
        if ( (pid[0] > 0) && (pid[n-1] == 0) ) {
            if(fork())
                fork();
        }
        exit(0);
    }
}

嗯,我有点困惑,因为我无法真正执行代码,而且我的逻辑也不是最好的,但我认为它从父亲创建了 72 个进程,然后仅在第一个子进程和最后一个进程中,每个进程创建了 2 个进程。 谢谢爱你

c linux fork
1个回答
0
投票

父进程创建 72 个子进程。

if ( childpid == 0 )

将在所有子进程中成功。

(pid[0] > 0)
在除第一个子进程之外的所有子进程中都为 true。第一个子进程在对
pid
进行赋值之前获取
pid[i]
数组的副本。

pid[n-1] == 0
在所有子进程中都为 true,因为在创建最后一个子进程之前不会分配数组索引,并且最后一个子进程在分配之前会获取数组的副本。

所以条件

if ( (pid[0] > 0) && (pid[n-1] == 0) )

在 71 个子进程中成功。然后执行那 71 个进程

            if(fork())
                fork();

这将创建两个孙进程。

if (fork())
在子进程中成功,因为如果第一个孙子进程
fork()
返回 PID,则该子进程再次执行
fork()
以创建第二个孙子进程。

因此创建的进程总数为 72 个子进程 + 71 * 2 个孙进程 = 214 个进程。

© www.soinside.com 2019 - 2024. All rights reserved.