fork() = Je me copie moi-même pour faire deux choses en parallèle ! ✨

       [Processus unique]
              |
              | fork()
              ⬇
        ┌─────┴─────┐
        ▼           ▼
  [Processus]  [Processus]
     Parent       Enfant

Exemple simple d’usage du fork

file : fork.c

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

int main() 
{
    pid_t pid = fork();
    if (pid == -1) 
    {
        perror("fork failed");
        return EXIT_FAILURE;
    }
    if (pid == 0) 
    {
        printf("Je suis le processus enfant\n");
    } 
    else 
    {
        printf("Je suis le processus parent\n");
    }
    return EXIT_SUCCESS;
}

un code amusant pour bien voir le Père et le Fils

Il faut 2 terminaux. Avec la commande tty, vérifiez que vous avez :

  • /dev/pts/1 pour afficher le père
  • /dev/pts/2 pour afficher le fils

Ici, Luc Skywalker !

File : darkvador.c

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

int main() 
{
    int tty;
    printf ("Luc je suis ton père! \n");
    /* Création du processus enfant */
    if (fork() == 0) 
    {
        /* ENFANT - écrit sur /dev/pts/2  */
        tty = open("/dev/pts/2", O_WRONLY);
        write(tty, "Je suis Luc SkyWalker !\n", 24);
        close(tty);    
    } 
    else 
    {
        /* PARENT - attend 3 secondes, puis écrit sur /dev/pts/1*/
        sleep(3);
        
        tty = open("/dev/pts/1", O_WRONLY);
        write(tty, "C'est bien mon petit !\n", 23);
        close(tty);
    }
    
    return EXIT_SUCCESS;
}