linux — uruchamianie procesu w tle
Terminal umożliwia uruchamianie kilku programów naraz, przełączanie się pomiędzy nimi polega na przesuwaniu programu z „pierwszego planu” w „tło”. Tylko pierwszoplanowy proces może odbierać dane od użytkownika.
Aby uruchomić program w tle wystarczy na końcu polecenia dostawić znak & (ang. Ampersand).
$ skrypt.sh &
[1] 637
$
Uruchamiając skrypt.sh w tle, umożliwiamy jego pracę i mamy jednocześnie dostęp do powłoki. Powłoka w nawiasie kwadratowym podała mi numer zadania (ang. job) — 1, oraz numer PID — 637.
Aby wyświetlić listę uruchomionych w tle zadań, należy użyć polecenia jobs, posiada ono dodatkowy parametr ‑l podający dodatkowo numer PID danego zadania.
Aby zatrzymać proces pierwszoplanowy należy użyć kombinacji Ctrl + z (w tym przypadku do procesu zostanie wysłany sygnał SIGSTP), aby zatrzymać proces można posłużyć się kombinacją Ctrl + c, przesłany zostanie do procesu sygnał SIGINT .
$ jobs ‑l
[1]- 637 Running skrypt.sh &
Aby dany proces uczynić pierwszoplanowym, należy posłużyć się poleceniem fg %numer zadania, lub fg %?nazwa polecenia lub fragment nazwy.
$ fg %1
$ fg %skrypt
W pierwszym przypadku przeniosłem zadanie na pierwszy plan odwołując się do jego numeru zadania, w drugim odwołując się po fragmencie nazwy.
Polecenie bg %numer zadania, uruchomi zatrzymane w tle zadanie, w przeciwieństwie do polecenia fg, nie przeniesie zadania na pierwszy plan.
$ skrypt.sh
Ctrl + z
[3]+ Stopped skrypt.sh
$ bg %3
[3]+ skrypt.sh &
Jeżeli na ekranie pojawią się dane wysyłane przez program w tle na standardowe wyjście, wyjście błędów, aby tego uniknąć można przekierować strumień do śmietnika np. skrypt.sh > /dev/null