Kann / proc / PID noch vorhanden sein, wenn PID nicht ausgeführt wird?


11

Ist es möglich, dass ein Ordner wie /proc/4587existiert, obwohl es keinen Prozess mit PID 4587 gibt?


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


3
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.
Stephen Kitt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.