Mit PID´s umgehen



  • Hallo und einen guten morgen erstmal.

    Mein Problemchen ist folgendes, ich habe die PID eines Prozesses (in einer txt datei gespeichert) jetzt möchte ich irgendwie sagen wir alle 5 Sekunden nachschauen ob der Prozess mit dieser PID noch lebt.

    D.h gibt es irgendeine Funktion die mir einen Boolwert liefert ob diese PID noch existiert oder nicht?

    Es wäre sehr hilfreich wenn jemand zufällig diese Funktion kennt (falls es sie gibt) oder mir anderweitig sagen kann wie ich das realisieren könnte.

    Grüße

    Peter



  • Du musst "OpenProcess" mit z.B. SYNCHRONIZE aufrufen.
    Auch brauchst Du nicht jedesmal zu prüfen ob der Prozess noch läuft. Du kannst einfach mit dem daraus gewonnenen Handle warten. Wird das Handle signalisiert, so wurde der Prozess beendet.



  • ohje... naJa mein problem ist das ich von dieser art der Programmierung "Handels etc" und "hooks" bzw was es da nicht alles gibt. Leider gar keine Ahnung habe 😞
    Ich schmeiss ja allein schon immer API und GUI und .net durcheinander....

    Daher versuche ich es nach guter alter C++ Schule



  • Exitus222 schrieb:

    Mein Problemchen ist folgendes, ich habe die PID eines Prozesses (in einer txt datei gespeichert) jetzt möchte ich irgendwie sagen wir alle 5 Sekunden nachschauen ob der Prozess mit dieser PID noch lebt.

    ganz schlechte idee. wenn der prozess beendet wird, wird die pid wieder frei und kann einem neuen prozess zugewiesen werden. ein 'handle' dagegen überlebt auch den tod des prozesses und ist solange gültig, bis du's selber löschst...



  • net schrieb:

    ein 'handle' dagegen überlebt auch den tod des prozesses und ist solange gültig, bis du's selber löschst...

    Wie macht Windows das eigentlich? Wenn jemand ein Handle des Prozesses holt, wird es nicht gelöscht oder wie? Merkwürdig, weil Windows dürfte ja nicht merken, wann das Handle nicht mehr genutzt/gespeichert wird.... Und mit GetExitCodeProcess kann man ja auch noch den Exit-Code nachsehen. Wie lange eigentlich? Oder unendlich lange??
    Liegen dann immer tausende von (größtenteils ungenutzten) Handels im Speicher rum?



  • Badestrand schrieb:

    Wie macht Windows das eigentlich? Wenn jemand ein Handle des Prozesses holt, wird es nicht gelöscht oder wie? Merkwürdig, weil Windows dürfte ja nicht merken, wann das Handle nicht mehr genutzt/gespeichert wird....

    naja, der windows kernel hantiert intern mit objekten. für'n neuen prozess legt der ein objekt an (KPROCESS heisst das glaub ich). im kernel gibt's ne komponente namens 'object manager' die den lebenszyklus dieser kernelobjekte regelt. wenn man sich ein handle auf ein objekt besorgt, dann weiss der objekt manager, dass er das objekt erst löschen darf, wenn alle prozesse ihre handles freigegeben haben, die auf dieses objekt verweisen. freigeben geht z.b. mit CloseHandle(). solange mindestens noch ein handle da ist, wird das objekt nicht beseitigt.


Log in to reply