Kiedy pracuję w terminalu często wykonuję kilka czynności na raz, np mam uruchomione irrsi, mc, podręcznik manuala i vim na którym edytuję jakiś plik konfiguracyjny. Abym mógł tak pracować muszę uruchomić kilka terminali/zakładek, lub korzystać ze screen, nie zawsze jest to wygodne rozwiązanie. Można jednak za pomocą jednego terminala uruchomić wiele aplikacji/komend, jedynym ograniczeniem jest tylko fakt iż jedna aplikacja może działać na pierwszym planie, reszta działa w tle.
Przykład: uruchamiam podręcznik dla squid3:
man squid3
Po czym odnajduję interesującą mnie informację, i zamierzam edytować plik konfiguracyjny squid3, więc wduszam ctrl+z i otrzymuje coś takiego:
[1]+ Stopped man squid3
Zatrzymało to proces man, system nie przydziela mu czasu procesora, a ja mam wolny prompt, więc mogę uruchomić vim aby edytować konfigurację:
vim /etc/squid3/squid.conf
Po wprowadzeniu zmian i ich zapisaniu mogę zastopować również vim (ctrl+z)
Teraz sprawdzam jakie zadania mam uruchomione w tle, robię to poleceniem jobs i otrzymuję coś takiego:
[1] Stopped man squid3
[2]- Stopped vim /etc/squid3/squid.conf
[3]+ Stopped mc
Teraz jeśli chce uruchomić zastopowany proces mc, posłużę się poleceniem fg i wpisując:
fg mc
lub:
fg 3
Jeśli wpiszę fg bez argumentu, to uruchomi się ostatnio zatrzymany proces.
Oprócz przywoływania zastopowanych aplikacji, mogę również przełączać już uruchomione programy aby działały w tle. Jest to szczególne przydatne kiedy z konsoli uruchamiam aplikację działającą w trybie graficznym, dla przykładu posłużę się gedit:
Uruchamiam gedit:
gedit
Po czym go zatrzymuję (ctrl+z) i otrzymuję coś takiego:
[4]+ Stopped gedit
Ale jak już wcześniej pisałem, ctrl+z zatrzymuje procesy, gedit jest uruchomiony, lecz zatrzymany i nie reaguje na nic, dlatego przełączam go aby działał w tle za pomocą polecenia bg i otrzymuję coś takiego:
[4]+ gedit &
Na liście którą wyświetla polecenie jobs, jest wyszczególnione które aplikacje są zatrzymane, a które uruchomione:
[1] Stopped man squid3
[2]- Stopped vim /etc/squid3/squid.conf
[3]+ Stopped mc
[4] Running gedit &
Aby od razu przełączyć program na działanie w tle uruchamiam go z & na końcu, dla przykładu:
gedit &
29 maja, 2010 at 18:49
Prawdziwą potęgę obsługi zadań w powłoce można zauważyć kiedy zaprzęgnie się do pracy także potoki.
Wyobraźmy sobie jakieś upierdliwe zadanie które odpaliliśmy, a które po odpaleniu okazuje się żądać 2^37 razy potwierdzenia. Oczywiście można spędzić dwa miesiące przy komputerze naciskając ‘y’ (przy założeniu że klawisz wytrzyma), ale można też:
1. zatrzymać zadanie ^Z
2. stworzyć potok:
# yes | fg > dupajasia.log
3. włala. można iść na piwko
29 maja, 2010 at 21:50
@krefik dzięki za rzeczowy i przydatny komentarz :)
30 maja, 2010 at 6:49
@krefik : O takim zastosowaniu nie wiedziałem. Jest jeden problem: skąd powłoka ma się domyśleć, które zadanie ma być na pierwszym planie?