[LINUX] Informationen zur Funktion fork () und zur Funktion execve ()

Über die Funktion fork ()

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");
    
    //Der untergeordnete Prozess hat den Rückgabewert 0
    if(pid == 0)
        child();
    //Die Prozess-ID des untergeordneten Prozesses, dessen Rückgabewert der übergeordnete Prozess ist(> 0)
    else 
        parent(pid);
}
Parent. parent's pid: 27701. child's pid: 27702
Child. pid: 27702.

Sie können sehen, dass untergeordnete Prozesse aus dem übergeordneten Prozess erzeugt werden und jeder eine andere Prozess-ID hat

Informationen zur Funktion execv ()

  1. Lesen Sie die ausführbare Datei
  2. Überschreiben Sie den Speicher des aktuellen Prozesses mit den Daten des neuen Prozesses
  3. Führen Sie einen neuen Prozess aus

execve.c


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

static void child()
{
    char *args[] = {"/bin/echo", "Hallo", 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.
Hallo

Nachdem der Prozess mit der Funktion fork () verzweigt ist, können Sie sehen, dass / bin / echo von der Funktion execve () im untergeordneten Prozess ausgeführt wird.

Recommended Posts

Informationen zur Funktion fork () und zur Funktion execve ()
Über _ und __
Über Klasse und Instanz
Über Funktionsargumente (Python)
Über Cumprod und Cummax
Informationen zur Entfaltungsfunktion
Python: Über Funktionsargumente
Über Kreuzvalidierung und F-Wert
Erfahren Sie mehr über die Druckfunktion und die Zeichenfolgen von Python für Anfänger.
Dies und das über pd.DataFrame
Code-Reduktion-Pipeline und Funktionstransformator-
Linux (Über Dateien und Verzeichnisse)
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
Informationen zu LINUX-Dateien und -Prozessen
Python-Anfänger-Memorandum-Funktion
Über Raid Group und LUN
Über die Aufzählungsfunktion (Python)
Über Djangos Dekonstruktion und Dekonstruierbarkeit
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Über Sharpe Ratio und Sortino Ratio
Über Python und reguläre Ausdrücke
Informationen zu Python- und Betriebssystemoperationen
Informationen zu http.Handle () und http.NewServeMux (). Handle ()
Python # Über Referenz und Kopie
Über Numpy Array und Asarray
Über Python sort () und reverse ()
Einführung und Implementierung der Aktivierungsfunktion
Funktionszeiger und objdump ~ C language ~
Zusammenfassung und häufige Fehler zu Cron
Über Python-Diktat und sortierte Funktionen
Über Python und Cython dtype
Über MkDocs-Themen und ihre Bräuche
Über Python Pickle (cPickle) und Marschall
[Python] Über Executor und zukünftige Klassen
Über Python, aus und importieren, als
Über Zeitreihendaten und Übertraining
Funktionssynthese und Anwendung in Python
[Python] Unterschied zwischen Funktion und Methode
Denken Sie grob über die Verlustfunktion nach
[Python] Funktionsargumente * (Stern) und ** (Doppelstern)