2017-01-25 25 views
1

Ich habe den folgenden Bash-Code, der überprüft, ob ein Prozess ausgeführt wird:Überprüfen Sie, ob Prozess läuft

is_running() { 
ps `cat "$pid_file"` > /dev/null 2>&1 
} 

Das Problem ist, dass is_running immer true ausgewertet wird.

$pid_file enthält eine Prozess-ID, die nicht aufgeführt ist, wenn ich ps ausführen. Ich möchte in diesem Fall is_runningfalse zurückgeben.

Wie kann ich es für diesen Zweck ändern?

+0

Verwenden Sie keine ' Katze auf diese Weise! – Inian

Antwort

3

Sie vermissen die -p Option:

ps -p PID 

In bash, würde ich einfach tun:

is_running() { ps -p $(<"$1") &>/dev/null ;} 

und den Dateinamen als Argument an die Funktion geben:

is_running /pid/file 

  • Sie benötigen $() anstelle des Arkanen `...`

  • bash mit der neueren Befehl Substitution Syntax starten unterstützt eine Kurz (&>) zur Anzeige der Umleitung von STDOUT und STDERR

+0

++; Nebenbei: die Verwendung von "-p" ist definitiv das Richtige, denn es ist die POSIX-konforme Methode, um eine PID zu übergeben, bei jeder "ps" -Implementierung bin ich auf etwas wie "ps $$" gestoßen auch. – mklement0

Verwandte Themen