Использование fork () для создания 1 родительского и 3 его дочерних процессов

Опубликовано: 16 Февраля, 2022

Программа для создания четырех процессов (1 родительский и 3 дочерних), где они завершаются в следующей последовательности:
(а) Родительский процесс наконец завершается
(b) Первый дочерний элемент завершается раньше родителя и после второго ребенка.
(c) Второй ребенок прекращает свое существование после последнего и перед первым ребенком.
(d) Третий ребенок оплодотворяется первым.

Предпосылка: fork (),

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

    // CPP code to create three child
    // process of a parent
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
      
    // Driver code
    int main()
    {
        int pid, pid1, pid2;
      
        // variable pid will store the
        // value returned from fork() system call
        pid = fork();
      
        // If fork() returns zero then it
        // means it is child process.
        if (pid == 0) {
      
            // First child needs to be printed
            // later hence this process is made
            // to sleep for 3 seconds.
            sleep(3);
      
            // This is first child process
            // getpid() gives the process
            // id and getppid() gives the
            // parent id of that process.
            printf("child[1] --> pid = %d and ppid = %d ",
                   getpid(), getppid());
        }
      
        else {
            pid1 = fork();
            if (pid1 == 0) {
                sleep(2);
                printf("child[2] --> pid = %d and ppid = %d ",
                       getpid(), getppid());
            }
            else {
                pid2 = fork();
                if (pid2 == 0) {
                    // This is third child which is
                    // needed to be printed first.
                    printf("child[3] --> pid = %d and ppid = %d ",
                           getpid(), getppid());
                }
      
                // If value returned from fork()
                // in not zero and >0 that means
                // this is parent process.
                else {
                    // This is asked to be printed at last
                    // hence made to sleep for 3 seconds.
                    sleep(3);
                    printf("parent --> pid = %d ", getpid());
                }
            }
        }
      
        return 0;
    }

    Output:

    child[3]-->pid=50 and ppid=47
    child[2]-->pid=49 and ppid=47
    child[1]-->pid=48 and ppid=47
    parent-->pid=47
    

Этот код работает на платформе Linux.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с Базовым курсом C для базового и продвинутого C.