Viele Programme wie sshd erstellen PID-Dateien in / var / run /, die ihre Prozess-ID enthalten. Sind diese Dateien zuverlässig, um festzustellen, ob ein Prozess ausgeführt wird? Ich vermute, dass diese Dateien manuell von einem Prozess erstellt werden und daher weiterhin im Dateisystem verbleiben, wenn das Programm abstürzt.
11
Jldupont gibt zu Recht an, dass PID-Dateien nicht zuverlässig sind, um festzustellen, ob ein Prozess ausgeführt wird, da die Datei im Falle eines Absturzes möglicherweise nicht entfernt wird.
Abgesehen von den Rennbedingungen verwende ich oft pgrep, wenn ich wissen muss, ob ein Prozess ausgeführt wird. Ich könnte dann die Ausgabe mit den PID-Dateien vergleichen, wenn ich dies für notwendig hielt.
quelle
Eine Datei mit einer Prozess-ID ist nicht zuverlässig. Bestimmen Sie, ob ein Prozess ausgeführt wird oder nicht. Es ist nur eine zuverlässige Quelle, um die zuletzt angegebene Prozess-ID für den Prozess herauszufinden.
Wenn Sie die Prozess-ID haben, müssen Sie weiter prüfen, ob der Prozess wirklich ausgeführt wird.
Hier ist ein Beispiel:
pgrep ist ein netter Befehl, aber Sie werden in Schwierigkeiten geraten, wenn mehrere Instanzen ausgeführt werden. Wenn beispielsweise ein reguläres sshd auf Port TCP / 22 und ein anderes sshd auf Port TCP / 2222 ausgeführt wird, liefert pgrep bei der Suche nach sshd zwei Prozess-IDs ... wenn das normale sshd seine pid in / var hat /run/sshd.pid und der andere könnte seine PID in /var/run/sshd-other.pid haben. Sie können die Prozesse klar unterscheiden.
Ich empfehle nicht , nur ps zu verwenden und mit grep und grep -v durch eine oder mehrere Pipes zu leiten , um alle anderen Dinge herauszufiltern, die Sie nicht interessieren ... es ist ein bisschen wie mit
um herauszufinden, ob eine Datei beendet wird.
quelle
Es ist nicht zuverlässig, einfach das Vorhandensein eines Prozesses mit derselben PID zu überprüfen, die in der Datei enthalten ist.
Viele Pidfile-Implementierungen sperren jedoch auch die Pidfile, sodass die Sperre aufgehoben wird, wenn der Prozess abbricht. Vorausgesetzt, der Sperrmechanismus ist zuverlässig, ist die Überprüfung, ob die Datei noch gesperrt ist, ein relativ zuverlässiger Mechanismus, um festzustellen, ob der ursprüngliche Prozess noch ausgeführt wird.
quelle
Jldupont ist richtig.
Sie können dem Prozess jedoch ein 0-Signal senden (kill -s 0 pid), um festzustellen, ob der Prozess noch aktiv ist (vorausgesetzt, Sie haben die Berechtigung, ein solches Signal zu senden - im Allgemeinen darf nur der Eigentümer eines Prozesses senden es ist ein Signal).
quelle
Ich stimme jschmier zu.
Auf einigen Systemen erhalten Sie keinen Zugriff auf pgrep. In einem solchen Fall können Sie
ps -aef | grep <pid>
herausfinden, ob der Prozess wirklich ausgeführt wird.quelle