Nice Job
Job-Kontrolle in der Shell
Abgekürzt
Die Bash überrascht auch erfahrene Benutzer immer wieder mit netten Abkürzungen und Variablen, die dem Administrator das Leben leichter machen. So steht das Ausrufezeichen als Variable beispielsweise für die Prozess-ID des zuletzt gestarteten Hintergrundprozesses. Die folgenden Befehle zeigen zunächst zusätzlich zur Job-ID die Prozess-ID an (jobs -l) und gibt anschließend mit dem Kommando echo die Prozess-ID des zuletzt gestarteten Hintergrundprozesses ($!) an:
$ sleep 100 & $ jobs -l [1]+ 1057 Stopped sleep 1000 [2] 1058 Running sleep 1000 & [3]- 1066 Running sleep 100 & $ echo $! 1066
Diese Information können Sie nun ganz geschickt einsetzen, um den letzten Prozess anzuhalten. Dazu kommt allerdings nicht das Kommando fg (dieses benötigt ja die Job-ID) mit anschließendem [Strg-Z] zum Einsatz, sondern ganz einfach das kill-Kommando: Es schießt Prozesse nicht nur einfach ab, sondern sendet ihnen auch alle möglichen Signale [1]. Eine Übersicht erhalten Sie, indem Sie kill -l tippen (oder wahlweise die Man-Page man 7 signal lesen). In diesem Fall setzen Sie das Signal -STOP ein:
$ kill -STOP $! $ jobs -l [1]- 1057 Stopped sleep 1000 [2] 1058 Running sleep 1000 & [3]+ 1066 Stopped (signal) sleep 100 &
Kontaktscheu
Eine Möglichkeit, Prozesse nach Beenden der Shell weiterlaufen zu lassen, bietet das Kommando nohup. Zum Abkoppeln setzen Sie nohup vor den eigentlichen Befehl und hängen das kaufmännische Und an, um den Prozess in den Hintergrund zu legen. Die Ausgabe verrät:
$ nohup sleep 1000 & [1] 1116 nohup: appending output to `nohup.out'
Auf diese Weise läuft der Prozess auch dann weiter, wenn Sie die Shell durch Eingabe von exit oder [Strg-D] verlassen. In der Datei nohup.out können Sie anschließend nachlesen, was in Ihrer Abwesenheit passiert ist.



