it-swarm.com.de

Was bewirkt "kill -0 $ pid" in einem Shell-Skript?

Grundsätzlich, welches Signal steht für '0', denn hier Ich sehe SIGNAL-Nummern, die mit 1 beginnen.

135
gjain

Dies ist eine gute Frage, weil ...

... kann es schwierig sein, eine Dokumentation zu diesem speziellen Signal zu finden. Ungeachtet dessen, was andere gesagt haben, ist die einzige Erwähnung dieses Signals in man 1 kill In Debian-basierten Systemen:

Besonders nützliche Signale sind HUP, INT, KILL, STOP, CONT und 0.

Nicht besonders hilfreich, besonders wenn Sie noch nicht wissen, was das Signal bewirkt. Es wird auch nicht in der Ausgabe von kill -l Aufgeführt, sodass Sie nichts davon wissen, es sei denn, Sie wissen es bereits.

Wo es dokumentiert ist

Auf Debian- und Ubuntu-Systemen lautet die Ausgabe von man 2 kill Teilweise:

Wenn sig 0 ist, wird kein Signal gesendet, aber es wird immer noch eine Fehlerprüfung durchgeführt. Hiermit kann geprüft werden, ob eine Prozess-ID oder eine Prozessgruppen-ID vorhanden ist.

Wofür ist es gut?

Mit kill -0 Können Sie prüfen, ob ein Prozess läuft. Betrachten Sie diese Beispiele.

# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid

# Check if a PID exists. When missing, this should result
# in output similar to:
#    bash: kill: (6228) - No such process
#    Exit status: 1
kill -0 $pid; echo "Exit status: $?"

Sie können auch kill -0 Verwenden, um festzustellen, ob der aktuelle Benutzer die Berechtigung hat, einen bestimmten Prozess zu signalisieren. Beispielsweise:

# See if you have permission to signal the process. If not,
# this should result in output similar to:
#     bash: kill: (15764) - Operation not permitted
#     Exit status: 1
Sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"
124
Todd A. Jacobs

Dieser Befehl überprüft, ob der Prozess mit der PID in $ pid aktiv ist.

6
Fritz G. Mehner

Kill -0 $ pid prüft, ob der Prozess mit pid existiert oder nicht.

Seien Sie vorsichtig, wenn Sie 'kill -0 $ pid' verwenden, um die Existenz des Prozesses zu überprüfen

  1. Sobald der beabsichtigte Prozess beendet ist, kann seine PID einem anderen neu erstellten Prozess zugewiesen werden. (Man kann also nicht so sicher sein, dass ein bestimmter Prozess am Leben ist oder nicht)

  2. Im Falle eines Zombie-Prozesses wartet das Kind darauf, dass die Eltern wait anrufen. Hier wird die $ pid festgehalten und das positive Ergebnis ausgegeben, während dieser Prozess nicht ausgeführt wird.

4
Sandeep_black

http://djangstorm.com/Content/kill.html . Fehlerprüfung, bezieht sich hier auf Berechtigungen, die zur Ausführung des Befehls durch den Benutzer verfügbar sind.

1
Rane

Kill -0 $ pid wird verwendet, um zu überprüfen, ob ein mit $ pid ausgeführter Prozess aktiv ist oder nicht. Dies kann jedoch schwierig sein, da die Prozess-ID neu zugewiesen werden kann, sobald ein Prozess beendet und ein neuer Prozess ausgeführt wird. Man kann killall -0 benutzen, um herauszufinden, ob ein bestimmter Prozess läuft oder nicht.

1
user9344710