fork



  • Eine frage zum erstellen eines Prozesses mit fork()

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/fcntl.h>
    #include <unistd.h>
    
    void start_daemon(void)
    {
        chdir("/");
        setsid();
    
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
    
        open("/dev/null", O_RDWR);
        dup(STDIN_FILENO);
        dup(STDIN_FILENO);
    
        while(1)
    
            sleep(100);
    }
    
    int main(int argc, char *argv[])
    {
        pid_t pid;
    
        if ((pid = fork()) < 0)
        {
            perror("fork() failed");
            return 1;
        }
    
        if (pid == 0)
            start_daemon();
    
        printf("Child has PID %i.\n", pid);
    
        return 0;
    }
    

    Was ich nicht verstehe ist folgendes:
    also durch

    if pid = fork
    

    wird getestet ob fork -1 zurückliefert -> fehler
    aber pid wird zu 0 deshalb wird starte_daemon ausgeführt
    doch wie wird die Prozess ID dann richtig ausgegeben

    printf("Child has PID %i.\n", pid);
    

    Ich dachte pid = 0 ?
    Wieso nimmt sie plötzlich die Prozess ID an?

    Danke



  • Die Stelle wird nur vom Vater Prozess erreicht.
    fork()<0 -> Fehler
    fork()==0 -> Kind-Prozess (neu erzeugt durch fork)
    fork()>0 -> Vater-Prozess (ürsprunglich gestarteter Prozess)



  • Ah Danke


Anmelden zum Antworten