简体   繁体   中英

Creating of specific process tree

I'm trying to create a process tree as on image . Down below is my code, that i wrote. It works properly but only a half. The output of my code is on the second screenshot . The problem is, that i don't know, how to make the last generation.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>


int main() {
    int i;
    int j;

    pid_t ppid;
    pid_t cpid;
    ppid = getpid();
    printf("I'm the parent, my PID is: %d\n", ppid);
    for (i = 0; i < 4; i++) {
        ppid = fork();
        if (ppid == 0) {
            printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid());
            for(j = 0; j < 2; j++) {
                ppid = fork();
                if (ppid == 0) {
                    printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid());
                    sleep(60);
                    printf("I'm process %d and I'm done\n", getpid());
                    exit(0);
                }
            }
            sleep(60);
            printf("I'm process %d and I'm done\n", getpid());
            exit(0);
        }   
    }

    sleep(1);
    printf("I'm process %d. Waiting for one of my children to complete", getpid());
    wait(NULL);
    printf("Eltern: I'm done\n");
    printf("... and bye. \n");
}

If I understand your question correct, you just need to add a fork in the inner most if-statement.

            if (ppid == 0) {
                printf("Hello, my PID is: %d, my parent's PID is %d\n", getpid(), getppid());

                // Add one more fork here

                sleep(60);
                printf("I'm process %d and I'm done\n", getpid());
                exit(0);
            }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM