8.4 Hintergrundprozess schützen
Wenn Sie Ihre Shell-Sitzung beenden, wird den Prozessen häufig ein SIGHUP-Signal gesendet. Bei Prozessen, die Sie im Hintergrund gestartet haben, bedeutet dies, dass der Prozess unweigerlich abgeschossen wird.
Hinweis Beim Testen auf verschiedenen Systemen ist mir allerdings aufgefallen, dass dieser Effekt nicht überall auftrat. Bei SuSE 9.1 bspw. liefen nach der Abmeldung und dem Anmelden die Hintergrundprozesse immer noch. Im Gegensatz dazu wurde bei einem Solaris-System der Kind-Prozess (hier der Hintergrundprozess) beim Beenden der laufenden Shell mitgerissen und beendet.
|
Somit scheint diese Schwierigkeit ein wenig system- bzw. distributionsabhängig zu sein. Sofern Sie das Problem haben, dass Prozesse, die im Hintergrund laufen, beendet werden, wenn sich der Benutzer ausloggt oder ein Eltern-Prozess an alle Kind-Prozesse das Signal SIGHUP sendet und diese somit beendet werden, können Sie das Kommando nohup verwenden. Allerdings scheint es auch hier wieder keine Einheitlichkeit zu geben, auf dem einen System ist nohup ein binäres Programm und auf den anderen wiederum ein einfaches Shellscript, welches das Signal 1 (SIGHUP) mit trap auffängt. Die Syntax:
nohup Kommando [Argument ...]
Natürlich wird mit der Verwendung von nohup der Prozess hier nicht automatisch in den Hintergrund gestellt, sondern Sie müssen auch hier wieder am Ende der Kommandozeile das & setzen. Und das passiert, wenn Sie einen Prozess mit nohup in den Hintergrund schicken:
|
Der Prozess erhält ausreichend Priorität, um im Hintergrund zu laufen. Genauer, der Prozess wird bei nohup um den Prioritätswert 5 erhöht. |
|
Der Prozess wird vor dem SIGHUP-Signal geschützt. Gleiches könnten Sie auch realisieren, indem Sie mit trap das Signal 1 abfangen. |
|
Wenn das Kommando die Standardausgabe und Standardfehlerausgabe auf das laufende Terminal benutzt, so wird diese in die Datei nohup.out umgeleitet. Sollte das nicht funktionieren, wird versucht, die Ausgabe in die Datei $HOME/nohup.out umzuleiten (meistens der Fall). Lässt sich die Datei nohup.out überhaupt nicht anlegen, verweigert nohup seine Ausführung. |
Als Rückgabewert liefert Ihnen die Funktion nohup den Fehlercode des Kommandos zurück. Sollte der Fehlercode allerdings den Wert 126 oder 127 haben, so bedeutet dies, dass nohup das Kommando gefunden hat, aber nicht starten konnte (126), oder dass nohup das Kommando gar nicht finden konnte (127).
Hier einige Beispiele:
you@host > find / -user $USER -print > out.txt 2>&1 &
[2] 4406
you@host > kill -SIGHUP 4406
you@host >
[2]+ Aufgelegt find / -user $USER -print >out.txt 2>&1
you@host > nohup find / -user $USER -print > out.txt 2>&1 &
[1] 4573
you@host > kill -SIGHUP 4573
you@host > ps | grep find
4573 pts/40 00:00:01 find
you@host > nohup find / -user $USER -print &
[1] 10540
you@host > nohup: hänge Ausgabe an nohup.out an
you@host > exit
### --- Nach neuem Login ---- ####
you@host > cat nohup.out
...
/home/tot/HelpExplorer/uninstall.sh
/home/tot/HelpExplorer/EULA.txt
/home/tot/HelpExplorer/README
/home/tot/HelpExplorer/starthelp
/home/tot/.fonts.cache-1
...
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|