[LINUX] À propos de la fonction fork () et de la fonction execve ()

À propos de la fonction fork ()

--Lorsque vous exécutez la fonction fork (), un processus enfant est généré à partir du processus parent.

fork.c


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

static void child()
{
    printf("Child. pid: %d.\n", getpid());
    exit(EXIT_SUCCESS);
}

static void parent(pid_t pid_child)
{
    printf("Parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
    exit(EXIT_SUCCESS);
}

int main()
{
    pid_t pid;
    pid = fork();
    
    if(pid == -1) err(EXIT_FAILURE, "fork() failed");
    
    //Le processus enfant a une valeur de retour de 0
    if(pid == 0)
        child();
    //L'ID de processus du processus enfant dont la valeur de retour est le processus parent(> 0)
    else 
        parent(pid);
}
Parent. parent's pid: 27701. child's pid: 27702
Child. pid: 27702.

Vous pouvez voir que les processus enfants sont générés à partir du processus parent et que chacun a un ID de processus différent

À propos de la fonction execv ()

--Le noyau exécute le processus selon le flux suivant

  1. Lisez le fichier exécutable
  2. Remplacez la mémoire du processus actuel par les données du nouveau processus
  3. Exécutez un nouveau processus

execve.c


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

static void child()
{
    char *args[] = {"/bin/echo", "Bonjour", NULL};
    printf("child. child's pid: %d.\n", getpid());
    execve("/bin/echo", args, NULL);
    err(EXIT_FAILURE, "execve() failed");
}

static void parent(pid_t pid_child)
{
    printf("parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
    exit(EXIT_SUCCESS);
}


int main(void)
{
    pid_t pid;
    pid = fork();
    if(pid == -1)
        err(EXIT_FAILURE, "fork() failed");
    
    if(pid == 0)
        child();
    else
        parent(pid);
    
}
parent. parent's pid: 28034. child's pid: 28035
child. child's pid: 28035.
Bonjour

Une fois que le processus s'est branché avec la fonction fork (), vous pouvez voir que / bin / echo est exécuté par la fonction execve () dans le processus enfant.

Recommended Posts

À propos de la fonction fork () et de la fonction execve ()
À propos de _ et __
À propos de la classe et de l'instance
À propos des arguments de fonction (python)
À propos de cumprod et cummax
À propos de la fonction Déplier
Python: à propos des arguments de fonction
À propos de la validation croisée et de la valeur F
Découvrez la fonction d'impression et les chaînes de python pour les débutants.
Ceci et cela à propos de pd.DataFrame
Réduction de code - Transformateur de pipeline et de fonction -
Linux (À propos des fichiers et des répertoires)
À propos des objets et des classes Python
À propos des variables et des objets Python
À propos des fichiers et des processus LINUX
fonction de mémorandum python pour débutant
À propos du groupe Raid et du LUN
À propos de la fonction enumerate (python)
À propos de la déconstruction et de la déconstructibilité de Django
À propos de Python, len () et randint ()
À propos de la date et du fuseau horaire Python
À propos du ratio de Sharpe et du ratio de Sortino
À propos de Python et des expressions régulières
À propos des opérations Python et OS
À propos de http.Handle () et http.NewServeMux (). Handle ()
Python # À propos de la référence et de la copie
À propos du tableau Numpy et d'un tableau
À propos de Python sort () et reverse ()
Introduction et mise en œuvre de la fonction d'activation
Pointeur de fonction et objdump ~ Langage C ~
Résumé et erreurs courantes sur cron
À propos de Python dict et des fonctions triées
À propos de Python et Cython dtype
À propos des thèmes MkDocs et de leurs coutumes
À propos de Python Pickle (cPickle) et Marshal
[Python] À propos des classes Executor et Future
À propos de Python, à partir et à l'importation, comme
À propos des données de séries chronologiques et du surentraînement
Synthèse de fonctions et application en Python
[Python] Différence entre fonction et méthode
Pensez grossièrement à la fonction de perte
[Python] Arguments de fonction * (étoile) et ** (étoile double)