bg

Wznawia zatrzymane zadanie i kontynuuje je w tle.

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 je jobs
  • %% 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.