sehe Thread nicht (POSIX)



  • Hallo, ich habe folgendes kleine POSIX-konforme Programm geschrieben, um das Thread-Verständnis zu festigen:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main(void) {
        int fpid;
        int pid = getpid();    // ProcessID des Prozesses
        int ppid = getppid();  // ProcessID des Elternprozesses
        int uid = getuid();
        fpid = fork();
    
        while (1) {
            printf("UID = %d PID = %d PPID = %d FPID = %d \n",uid,pid,ppid,fpid);
        }
    	return EXIT_SUCCESS;
    }
    

    Mein Problem ist jetzt, dass wenn ich im Process Explorer schaue, sehe ich den Process mit der PID nicht. Ich sehe den Elternprozess und den neu erstellten Process FPID, aber nicht das laufende Programm an sich. Ich benutze übrigens Windows XP mit cygwin, Netbeans 6.7.1 und den Sysinternals ProcessExplorer. Kann mir das jemand erklären? Ach, und was hat's mit der UID auf sich? Danke im Voraus!



  • fork() hat nichts mit Threads zutun. Es erstellt lediglich eine Kopie des Prozesses als eigenständigen Prozess und kann simultan Aufgaben erledigen. Für wenige simultane Aufgaben ausreichen, wählt man für viele gleichzeitig auszuführende Aktionen eher Threads, da diese weniger Overhead haben.

    Wie fork() genau funktioniert, kannst du in den Manpages sowie auch bei Wikipedia nachlesen.



  • UID ist die User ID. Damit erfährst du welchem Benutzer der Prozess gehört. Siehe man: getuid. btw. solltest du lieber pid_t für PIDs und uid_t für UIDs anstelle int nehmen.

    Vielleicht siehst du den Prozess nicht, weil Cygwin die Prozesse intern anders handhabt. Cygwin hat doch sicher eine POSIX Shell. Gibt da mal "ps aux" ein und schau ob der Prozess dabei ist.



  • ja vielen Dank für die Antworten! es scheint doch ein cygwin bug zu sein, denn in ps aux wird der process angezeigt, nur dringt er irgendwie nicht nach aussen zum windows process explorer / task manager.


Log in to reply