Jede Lösung, die so etwas verwendet ps aux | grep abc
oder pgrep abc
fehlerhaft ist.
Warum?
Da Sie nicht prüfen, ob ein bestimmter Prozess ausgeführt wird, prüfen Sie, ob Prozesse ausgeführt werden, die übereinstimmen abc
. Jeder Benutzer kann auf einfache Weise eine ausführbare Datei mit dem Namen erstellen und ausführen abc
(oder die abc
irgendwo im Namen oder in den Argumenten enthalten ist), was zu einem Fehlalarm für Ihren Test führt. Es gibt verschiedene Optionen , die Sie anwenden können ps
, grep
und um pgrep
die Suche zu starten, aber Sie werden immer noch keinen zuverlässigen Test bekommen.
Wie teste ich zuverlässig auf einen bestimmten laufenden Prozess?
Das hängt davon ab, wofür Sie den Test benötigen.
Ich möchte sicherstellen, dass der Dienst abc ausgeführt wird, und falls nicht, starten Sie ihn
Dafür sind init und upstart da. Sie werden den Dienst starten und sicherstellen, dass seine PID in einer PID-Datei gespeichert wird. Wenn Sie versuchen, den Dienst erneut zu starten (über init oder upstart), wird die PID-Datei überprüft und entweder gestartet, wenn sie nicht vorhanden ist, oder abgebrochen, wenn sie bereits ausgeführt wird. Dies ist immer noch nicht 100% zuverlässig, aber es ist so nah wie möglich.
Weitere Lösungen finden Sie unter Wie kann ich überprüfen, ob mein Spielserver noch ausgeführt wird ?.
ABC ist mein Skript. Ich muss sicherstellen, dass nur eine Instanz meines Skripts ausgeführt wird.
Verwenden Sie in diesem Fall eine Sperrdatei oder ein Sperrverzeichnis. Z.B
#!/usr/bin/env bash
if ! mkdir /tmp/abc.lock; then
printf "Failed to acquire lock.\n" >&2
exit 1
fi
trap 'rm -rf /tmp/abc.lock' EXIT # remove the lockdir on exit
# rest of script ...
Weitere Informationen zum Sperren finden Sie in den Bash-FAQ 45 .
zombie
process" (nicht das, was ich als "running" -Prozess bezeichnen würde) gebracht. Eine vollständige Liste dessen, was dieSTAT
Spaltenwerte in der Ausgabe vonps
anzeigen, ist hier für diejenigen, die geneigt sind, eine Antwort zu schreiben, die dies berücksichtigt, oder ihre eigenen zu bearbeiten.