Job control (kontrola zadań) to mechanizm powłoki (np. Bash czy Zsh), który pozwala Ci zarządzać wieloma poleceniami w obrębie jednej sesji terminala: wstrzymywać je, wznawiać oraz przerzucać między pierwszym planem (foreground) a tłem (background). Dzięki temu nie musisz otwierać nowego okna terminala za każdym razem, gdy długo działające polecenie zablokuje Ci prompt. Każde uruchomione polecenie powłoka traktuje jako tzw. job i przypisuje mu numer, którym potem operujesz.
Sednem są tu dwa stany. Proces w foreground zajmuje terminal i odbiera Twoje znaki z klawiatury, więc póki działa, prompt jest niedostępny. Proces w background działa równolegle i oddaje Ci terminal do dalszej pracy. Powłoka pilnuje, które zadanie jest aktywne, zatrzymane czy działa w tle, i tym właśnie steruje job control.
Jak to działa w praktyce
Najprostszy scenariusz: odpaliłeś coś, co trwa dłużej niż chciałeś — na przykład tar -czf backup.tar.gz /var/www. Zamiast czekać z założonymi rękami, wciskasz Ctrl+Z. To wysyła sygnał SIGTSTP i wstrzymuje zadanie (status stopped). Teraz odzyskujesz prompt. Wpisujesz bg, żeby wznowić to zadanie w tle, i archiwizacja leci dalej, a Ty robisz swoje. Gdy będziesz chciał je z powrotem na wierzch, wpisujesz fg.
Podstawowe komendy:
jobs— pokazuje listę zadań sesji z ich numerami i statusem;fg %1— przenosi zadanie numer 1 na pierwszy plan;bg %1— wznawia wstrzymane zadanie w tle;polecenie &— uruchamia polecenie od razu w tle, np../skrypt.sh &.
Na co uważać
Najczęstsza pułapka: zamykasz terminal i dziwisz się, że proces w tle padł. W typowej konfiguracji zadania są przypięte do sesji powłoki i dostają SIGHUP przy jej zakończeniu. Jeśli proces ma przeżyć wylogowanie, użyj nohup polecenie & albo wyjmij job z tablicy przez disown. Druga sprawa: Ctrl+Z to nie to samo co Ctrl+C — pierwsze wstrzymuje (proces nadal istnieje i zżera zasoby), drugie wysyła SIGINT i zwykle kończy program. Pamiętaj też, że proces w tle, który próbuje czytać z terminala, sam się zatrzyma i będzie czekał na fg.
Do poważniejszego zarządzania długimi sesjami i tak sięgniesz po tmux lub screen — job control sprawdza się głównie do szybkiego żonglowania zadaniami tu i teraz.
Pojęcia powiązane: foreground i background, sygnały (SIGTSTP, SIGINT, SIGHUP), nohup, disown, tmux, screen, proces, shell.