Erkennen, ob der Prozess unter Linux existiert Einfach, "ps -ef | grep xx"Nur ein Klick und es ist geschafft! Natürlich können Sie dies tun, aber wenn wir die Leistung berücksichtigen, ist dies möglicherweise keine gute Idee.
Angenommen, wir möchten jetzt überwachen, ob ein Prozess aktiv ist. Mit der oben genannten Methode müssen wir jede Minute den Befehl ps ausführen und eine reguläre Suche durchführen. Dieser Overhead scheint nichts auf dem Server zu verursachen, aber was ist, wenn wir Dutzende oder Hunderte solcher Prozesse gleichzeitig auf demselben Knoten überwachen möchten?
Also müssen wir einige bessere Methoden aus Sicht der Leistung erkunden. Daemon-Prozesse verfügen normalerweise über eigene PID- oder Sperrdateien. Wir können überprüfen, ob diese Dateien vorhanden sind, um festzustellen, ob der Prozess vorhanden ist. Unter bestimmten ungewöhnlichen Umständen existiert der Prozess, in dem die PID-Datei vorhanden ist, jedoch nicht. Daher können Sie sich nicht auf die PID-Datei des Prozesses verlassen, um festzustellen, ob der Prozess aktiv ist.
Eine zuverlässige Methode ist die Verwendung von „kill -0 pid“. kill -0 sendet kein Signal an den Prozess, führt aber eine Fehlerprüfung durch. Der Befehl gibt 0 zurück, wenn der Prozess existiert, und 1, wenn er nicht existiert.[sw@gentoo ~]$ ps PID TTY TIME CMD pts/0 00:00:00 bash pts/0 00:00:00 ps [sw@gentoo ~]$ kill -0 15091 [sw@gentoo ~]$ echo $? [sw@gentoo ~]$ kill -0 15092 -bash: kill: (15092) - No such process [sw@gentoo ~]$ echo $? [sw@gentoo ~]$
Diese Methode kann jedoch nur von normalen Benutzern verwendet werden, um ihre eigenen Prozesse zu überprüfen, da das Senden von Signalen an die Prozesse anderer Benutzer aufgrund fehlender Berechtigungen einen Fehler verursacht und der Rückgabewert ist auch 1. Das obige ist der detaillierte Inhalt vonLinux erkennt, ob ein Prozess existiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website![sw@gentoo ~]$ kill 2993
-bash: kill: (2993) - Operation not permitted
[sw@gentoo ~]$ echo $?
1
[sw@gentoo ~]$