【问题标题】:i want to know how many processes this program actually produces我想知道这个程序实际产生了多少进程
【发布时间】:2021-03-01 00:35:15
【问题描述】:

我想知道这个程序通过调用fork 3次产生了多少父子进程

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

int main(){  
    int i;

    printf("before fork, my pid is %d\n" , getpid());  

    for (i=0; i<3; i++){

        if ( fork()== 0 )
            printf("Hi, I am child. My pid is %d\n", getpid());
    }
}

上述程序的输出

fork 之前,我的 pid 是 4221

完成,我的 pid 是 4221

完成,我的 pid 是 4224

完成,我的 pid 是 4223

完成,我的 pid 是 4226

完成,我的 pid 是 4222

完成,我的 pid 是 4227

完成,我的 pid 是 4225

完成,我的 pid 是 4228

【问题讨论】:

  • 您可以轻松地在纸上解决这个问题。提示:每个fork() 调用都会产生一个子进程,并且该子进程会继续按照父进程的方式循环。
  • 那是欢迎儿童杀手的时候
  • 与“my pid”的数量一样多
  • 你对这个问题的理解是什么?

标签: c fork pid


【解决方案1】:

您可以使用pstree -p 自己检查(p 打印 PID)

输入getchar() 暂停程序:

for (i = 0; i < 3 ; i++)
{
    if (fork() == 0)
        printf("Hi, I am child. My pid is %d\n", getpid());
}
getchar();

现在打开一个新的控制台,使用父进程的 PID 将 pstree 与暂停的程序一起使用:

david@david:~$ pidof program
17460 17459 17458 17457 17456 17455 17454 17453
david@david:~$ pstree -p 17453
demo(17453)─┬─demo(17454)─┬─demo(17457)───demo(17459)
            │             └─demo(17458)
            ├─demo(17455)───demo(17460)
            └─demo(17456)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2010-09-25
    • 2015-12-06
    • 1970-01-01
    • 2014-06-22
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多