Fragen Sie sich, ob die Überprüfung auf / proc / N eine sichere / zuverlässige Methode ist, um festzustellen, ob PID N ausgeführt wird?
Andy Lester
Ich habe mich gefragt, ob theoretisch Rückstände in / proc vorhanden sein könnten, nachdem der Prozess abgeschlossen ist.
David Dai
Antworten:
25
Wenn /procnur der procMount (und niemand spielt Streiche mit Overlays), nein, ein pid-basierter Ordner existiert nur, solange der entsprechende Prozess in einem bestimmten Zustand existiert (auch als Zombie). Kurz bevor ein Verzeichniseintrag für eine Prozess-ID zurückgegeben wird, überprüft der Kernel die Existenz des Prozesses erneut. In dem Moment, in dem ein Verzeichniseintrag zurückgegeben wird, ist der entsprechende Prozess noch vorhanden. Der Zugriff auf ein Verzeichnis beginnt auch mit dem Nachschlagen des entsprechenden Prozesses. (Wenn sich die Zeilennummern ändern, suchen Sie nach proc_pident_instantiateund proc_pident_lookup.)
Sie können auf Probleme stoßen, die durch das Auflisten /procund Verwenden der Ergebnisse später (sogar einige Mikrosekunden später) verursacht werden: Ein Prozess kann ausgeführt werden, wenn Sie auflisten /proc, und anhalten, bevor Sie auf die Ergebnisse reagieren.
Was ist mit Prozessen, die die Ausführung beendet haben, aber wait()nicht aufgerufen wurden?
el.pescado
2
Guter Punkt @ el.pescado, eine schnelle Überprüfung zeigt an, dass Zombie-Prozesse noch ihr Verzeichnis haben. Ich werde meine Antwort aktualisieren, danke!
Stephen Kitt
Wenn psder Prozess angezeigt wird, sollte sein /procVerzeichnis grundsätzlich vorhanden sein.
Barmar
@Barmar "muss" in der Tat: psZugriffe /proc, um die angezeigten Informationen zu finden.
Antworten:
Wenn
/proc
nur derproc
Mount (und niemand spielt Streiche mit Overlays), nein, ein pid-basierter Ordner existiert nur, solange der entsprechende Prozess in einem bestimmten Zustand existiert (auch als Zombie). Kurz bevor ein Verzeichniseintrag für eine Prozess-ID zurückgegeben wird, überprüft der Kernel die Existenz des Prozesses erneut. In dem Moment, in dem ein Verzeichniseintrag zurückgegeben wird, ist der entsprechende Prozess noch vorhanden. Der Zugriff auf ein Verzeichnis beginnt auch mit dem Nachschlagen des entsprechenden Prozesses. (Wenn sich die Zeilennummern ändern, suchen Sie nachproc_pident_instantiate
undproc_pident_lookup
.)Sie können auf Probleme stoßen, die durch das Auflisten
/proc
und Verwenden der Ergebnisse später (sogar einige Mikrosekunden später) verursacht werden: Ein Prozess kann ausgeführt werden, wenn Sie auflisten/proc
, und anhalten, bevor Sie auf die Ergebnisse reagieren.quelle
wait()
nicht aufgerufen wurden?ps
der Prozess angezeigt wird, sollte sein/proc
Verzeichnis grundsätzlich vorhanden sein.ps
Zugriffe/proc
, um die angezeigten Informationen zu finden.