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
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