Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Linux erkennt, ob ein Prozess existiert

Linux erkennt, ob ein Prozess existiert

(*-*)浩
(*-*)浩Original
2019-11-04 10:17:333140Durchsuche

Linux erkennt, ob ein Prozess existiert

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.

[sw@gentoo ~]$ kill 2993
-bash: kill: (2993) - Operation not permitted
[sw@gentoo ~]$ echo $?
1
[sw@gentoo ~]$
Wenn Sie den Kill-Befehl als privilegierter Benutzer ausführen, gibt es natürlich kein Berechtigungsproblem.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn