【问题标题】:How can i create 5 Processes using fork()?如何使用 fork() 创建 5 个进程?
【发布时间】:2021-06-11 03:11:39
【问题描述】:

我想创建 5 个进程,就像显示的图片一样,我通过打印出他们的 pid 尝试了一点点,但我很难想象创建它们的 fork() 并得到我想要的 [图像显示 5 个进程通过管道连接]

          P
       /     \
      M       M
      |        |
      C        C

【问题讨论】:

    标签: c process operating-system fork


    【解决方案1】:

    当您使用fork() 时,kernel 将创建一个新进程并将返回到子进程(新进程)0PID 到父进程。因此,知道这一点,这是创建树的以下代码

    if ((pid = fork()) == 0) {
        //I am process M1
        if (pid = form()) == 0) {
           //I am process C1
        } 
    } else {
    // I am still in P, so go on the next branch
        if ((pid = fork()) == 0) {
           //I am process M2
           if (pid = form()) == 0) {
              //I am process C2
           }
        }
    } 
    

    使用ps --forest 可视化进程树,如下例所示

    ~# ps --forest
        PID TTY          TIME CMD
       1295 pts/0    00:00:00 sudo
       1296 pts/0    00:00:00  \_ su
       1297 pts/0    00:00:01      \_ bash
       3541 pts/0    00:00:00          \_ ps
    

    所以你会看到类似的东西:

    ~# ps --forest
        PID TTY          TIME CMD
       1295 pts/0    00:00:00 a.out
       1296 pts/0    00:00:00  \_ a.out
       1297 pts/0    00:00:00      \_ a.out
       1298 pts/0    00:00:00  \_ a.out
       1299 pts/0    00:00:00      \_ a.out
    

    这会告诉你是否成功制作了树。

    【讨论】:

    • 我想知道c程序内部的fork进程
    • 程序内部的fork() 将在kernel 内部创建一个进程,因此,可视化进程以查看分叉。
    • 如果你想写一个C代码来为它创建的进程绘制树,你需要从父级开始,并构建一个你调用fork()的树
    • 我想问一下这是否会创建我正在寻找的树?
    • fork(){fork(){fork(){fork()}}};
    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 2021-12-15
    • 2012-06-10
    • 2023-03-22
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多