Usando fork() para producir 1 padre y sus 3 procesos secundarios

Programa para crear cuatro procesos (1 padre y 3 hijos) donde terminan en una secuencia de la siguiente manera:
(a) El proceso padre termina al final
(b) El primer hijo termina antes que el padre y después del segundo hijo.
(c) El segundo hijo termina después del último y antes del primer hijo.
(d) El tercer hijo termina primero.

Requisito previo: tenedor() ,

    // 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\n",
                   getpid(), getppid());
        }
      
        else {
            pid1 = fork();
            if (pid1 == 0) {
                sleep(2);
                printf("child[2] --> pid = %d and ppid = %d\n",
                       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\n",
                           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\n", getpid());
                }
            }
        }
      
        return 0;
    }

    Producción:

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

Este código se ejecuta en la plataforma Linux.

Publicación traducida automáticamente

Artículo escrito por akanshgupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *