L'utilisation et le principe de la fonction fork en C++

L'utilisation et le principe de la fonction fork en C++ En C++, la fonction fork est utilisée pour créer un nouveau processus appelé sous-processus, qui est presque identique au processus d'origine.

Aperçu de base de la fonction fourche

Une fois la fonction fork() appelée avec succès, il y aura deux valeurs de retour. Le processus courant, c'est-à-dire le processus parent, renvoie le pid du processus enfant, et le processus enfant renvoie 0. Renvoie -1 si l'appel de la fonction échoue.

#include <stdio.h>
#include <unistd.h>
int main(void) {
    int i = 0;
    printf("i\tson/pa\tppid\tpid\tfpid\n");
    for (i = 0; i < 2; i++) {
        pid_t fpid = fork();
        if (fpid == 0)
            printf("%d\tchild\t%4d\t%4d\t%4d\n", i, getppid(), getpid(), fpid);
        else
            printf("%d\tparent\t%4d\t%4d\t%4d\n", i, getppid(), getpid(), fpid);
    }
    return 0;
}

résultat de l'opération :

    i son/pa ppid pid fpid

    i son/pa ppid pid fpid
    0 parent 54861 57344 57345
    0 child 57344 57345 0
    1 parent 54861 57344 57346
    1 parent 57344 57345 57347
    1 child 57344 57346 0
    1 child 57345 57347 0

Voici une analyse simple :

1. Après fork() du processus avec le pid 57344, 57345 est renvoyé, qui est le pid d'un processus enfant.

2. La valeur de retour du processus enfant est 0, évidemment son pid de processus parent est 57344.

3. La boucle for continue de s'exécuter ;

4. À ce stade, le processus avec le pid 56344 crée un processus enfant avec le pid 56346.

5. Le processus enfant précédent avec le pid de 56345 agit en tant que processus parent à ce moment, et il crée un processus enfant avec le pid de 56347.

6. Ensuite, les processus de 56346 et 56347 continuent de s'exécuter et le programme se termine.

Ce que fait la fonction fork

#include<unistd.h>
pid_t fork(void)

Valeur de retour : pid_til s'agit d'un descripteur de processus, qui est essentiellement un int. Si l'appel de la fonction fork échoue, il renvoie un nombre négatif. Si l'appel réussit, il renvoie deux valeurs : 0 et l'ID du processus enfant.

Fonction fonction : créer un nouveau processus enfant avec le processus actuel comme processus parent et copier toutes les ressources du processus parent dans le processus enfant, de sorte que le processus enfant existe en tant que copie du processus parent. Les processus parent et enfant sont presque identiques, mais il existe également des différences telles que les ID de processus parent et enfant sont différents.

Après la fonction fork

Si le programme crée simplement un nouveau processus qui est presque exactement le même, alors un tel processus est inutile. Par conséquent, si nous pouvons remplacer le nouveau processus enfant par un autre programme, nous avons utilisé avec succès un processus pour créer un processus enfant complètement différent. Concernant le remplacement de processus, je ne rentrerai pas dans les détails ici, et j'en reparlerai plus tard.

Je suppose que tu aimes

Origine juejin.im/post/7250710949140971577
conseillé
Classement