bg to wbudowane polecenie powłoki (bash, zsh i innych), które wznawia zatrzymane zadanie i puszcza je w tle. Scenariusz jest klasyczny: odpaliłeś długi proces, zorientowałeś się, że blokuje Ci terminal, więc wciskasz Ctrl+Z, żeby go zatrzymać — a potem bg odwiesza go i pozwala mu mielić dalej, podczas gdy Ty odzyskujesz znak zachęty. Innymi słowy: to sposób, żeby zadanie uruchomione „na pierwszym planie” przenieść do tła bez jego zabijania.
Składnia i najważniejsze opcje
Podstawowa składnia jest banalnie prosta:
bg [%numer_zadania]
bg nie ma typowych przełączników w stylu -x — przyjmuje za to identyfikator zadania (job spec). Bez argumentu działa na zadaniu bieżącym. Najczęściej używane wskaźniki to:
%n— zadanie o numerze n (np.%1), tak jak pokazuje jejobs%%lub%+— zadanie bieżące (to ostatnio zatrzymane lub przeniesione do tła)%-— zadanie poprzednie (przedostatnie w kolejce)%nazwa— zadanie, którego polecenie zaczyna się od „nazwa”%?tekst— zadanie, którego polecenie zawiera „tekst”
Bez podanego identyfikatora bg wznawia po prostu zadanie bieżące — czyli to oznaczone + na liście z jobs.
Przykłady użycia
bg — wznawia w tle ostatnio zatrzymane zadanie. Najczęstszy wariant: po Ctrl+Z wpisujesz bg i lecisz dalej.
bg %2 — przenosi do tła konkretnie zadanie numer 2 (sprawdzisz numery przez jobs).
sleep 300; Ctrl+Z; bg — zatrzymujesz długie sleep i odwieszasz w tle; terminal znów jest Twój.
bg %vim — wznawia w tle zadanie, którego polecenie zaczyna się od „vim” (przydatne, gdy masz kilka zatrzymanych procesów).
bg %?tar — odwiesza zadanie zawierające w poleceniu „tar”, np. rozpoczęte wcześniej archiwizowanie.
Częste błędy i pułapki
„bg: no current job” — nie masz żadnego zatrzymanego zadania. bg nie startuje niczego od zera; działa wyłącznie na procesach już istniejących i zatrzymanych (zwykle przez Ctrl+Z).
Proces w tle nadal pisze na ekran. bg oddaje terminal, ale zadanie wciąż jest dziećmi tej sesji — jego stdout i stderr dalej lecą do Twojego okna. Jeśli Ci to przeszkadza, przekieruj wyjście do pliku już przy starcie.
Program czekający na wejście. Jeśli proces w tle spróbuje czytać z klawiatury, zostanie automatycznie zatrzymany (status stopped (tty input)). Wtedy musisz wrócić do niego przez fg.
Zamknięcie terminala = zwykle koniec zadania. Zadanie w tle nadal jest powiązane z sesją powłoki. Wylogowanie czy zamknięcie okna często wysyła SIGHUP i ubija proces. Chcesz, żeby przeżył? Użyj disown albo od początku odpalaj przez nohup.
Powiązane komendy: fg (przywraca zadanie na pierwszy plan), jobs (lista zadań sesji), Ctrl+Z (zatrzymanie procesu), disown (odpięcie od sesji), nohup i kill.