Unix – in Skripten prüfen, ob ein Prozeß läuft

Ich mag Unix, hab ich das schon mal erwähnt? Alles, was auf der Kommandozeile möglich ist, kann man mit Skripten automatisieren.

Ein Thema beim Erstellen von Shell Skripten ist der Umgang mit Prozessen. Wer schon mal mit einer Unix Shell Bekanntschaft gemacht hat, wird die Befehle ps und kill kennen, mit denen man sich eine Übersicht über laufende Prozesse verschafft, bzw. sie beendet. Vielleicht ist auch bekannt, dass man mit kill -9 einem Wunsch einen Prozess zu beenden Nachdruck verleihen kann.

Was weniger bekannt sein dürfte (zumindest mir bis vor kurzem nicht) ist, dass man mit kill -0 auch feststellen kann, ob ein Prozess noch läuft. Denn mit dem Befehl kill kann man einem Prozess auch Signale schicken, zu denen auch schon das vorhin erwähnte Signal 9 gehört.

Alles was man dazu benötigt ist die Prozess ID (pid). Diese erhält man über die Shell Variable $!. In Zeile 4 des Beipiels wird sie gleich mit dem Start eines Prozesses in einer Variablen abgespeichert. In der darauf folgenden Zeile wird dieser pid dann das Signal 0 über den Befehl kill gesendet.
Findet der Kernel diese pid in seiner Prozesstabelle erhält man als Returnwert 0, wenn nicht eine 1. So muss man nicht selbst umständlich in der Prozesstabelle suchen.

#!/bin/bash

pid=""   
./longrun.sh & pid=$!
kill -0 $pid 2>/dev/null

if [ $? -eq 0 ]
then
   echo "existing process $pid"
else
   echo "no process with pid: $pid"
fi

exit 0

Links:
Beispiele für weitere Programmiersprachen

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: