zazwyczaj gdy uruchamiasz polecenie w terminalu, musisz poczekać, aż polecenie zakończy się, zanim będziesz mógł wprowadzić inne. Nazywa się to uruchomieniem polecenia w procesie pierwszoplanowym lub pierwszoplanowym. Gdy proces działa na pierwszym planie, zajmuje powłokę i można z nią wchodzić w interakcje za pomocą urządzeń wejściowych.
Co zrobić, jeśli wykonanie polecenia zajmie dużo czasu, a w międzyczasie będziesz chciał uruchomić inne polecenia? Masz do dyspozycji kilka opcji., Najbardziej oczywistą i prostą opcją jest rozpoczęcie nowej sesji powłoki i uruchomienie w niej polecenia. Inną opcją jest uruchomienie polecenia w tle.
proces w tle to proces / polecenie uruchamiane z terminala i uruchamiane w tle, bez interakcji użytkownika.
w tym artykule omówimy procesy w tle to Linux. Pokażemy Ci jak uruchomić polecenie w tle i jak utrzymać proces uruchomiony po zamknięciu sesji powłoki.,
Uruchom polecenie Linuksa w tle #
aby uruchomić polecenie w tle, Dodaj symbol ampersand (&
) na końcu polecenia:
command &
identyfikator zadania powłoki (otoczony nawiasami) i identyfikator procesu zostanie wydrukowany na terminalu:
25177
możesz mieć wiele procesów działających w tle w tym samym czasie.
proces w tle będzie kontynuował zapisywanie wiadomości do terminala, z którego wywołano polecenie., To suppress the stdout
and stderr
messages use the following syntax:
command > /dev/null 2>&1 &
>/dev/null 2>&1
means redirect stdout
to /dev/null
and stderr
to stdout
.,/div>
aby przenieść proces w tle na pierwszy plan, użyj polecenia fg
:
fg
Jeśli masz wiele zadań w tle, Dołącz %
I ID zadania po poleceniu:
fg %1
aby zakończyć proces w tle, użyj polecenia kill
, po którym następuje ID procesu:
kill -9 25177
przenieś proces pierwszoplanowy do tła #
aby przenieść uruchomiony proces pierwszoplanowy w tle:
- zatrzymaj proces wpisując
Ctrl+Z
., - Przenieś zatrzymany proces do tła, wpisując
bg
.
utrzymuj procesy działające w tle po zakończeniu powłoki #
Jeśli połączenie zostanie przerwane lub wylogujesz się z sesji powłoki, procesy działające w tle zostaną zakończone. Istnieje kilka sposobów na utrzymanie działania procesu po zakończeniu sesji powłoki interaktywnej.,
jednym ze sposobów jest usunięcie zadania z kontrolki zadania powłoki za pomocą disown
wbudowana powłoka:
disown
Jeśli masz więcej niż jedno zadanie w tle, Dołącz %
I ID zadania po poleceniu:
iv id
potwierdź, że zadanie zostanie usunięte z tabeli aktywnych zadań za pomocą polecenia jobs -l
. Aby wyświetlić listę wszystkich uruchomionych procesów, w tym wyłączonych, użyj polecenia ps aux
.,
innym sposobem utrzymania procesu działającego po zakończeniu powłoki jest użycienohup
.
polecenienohup
wykonuje inny program podany jako jego argument i ignoruje wszystkie sygnałySIGHUP
(hangup). SIGHUP
jest sygnałem, który jest wysyłany do procesu, gdy jego terminal sterujący jest zamknięty.
aby uruchomić polecenie w tle używając polecenianohup
, wpisz:
nohup command &
wyjście polecenia jest przekierowywane do plikunohup.out
.,
nohup: ignoring input and appending output to 'nohup.out'
Jeśli wylogujesz się lub zamkniesz terminal, proces nie zostanie zakończony.
alternatywy #
istnieje wiele programów, które pozwalają mieć wiele interaktywnych sesji w tym samym czasie.
Screen #
Screen lub GNU Screen to program do multipleksowania terminali, który pozwala na rozpoczęcie sesji screen i otwarcie dowolnej liczby okien (wirtualnych terminali) wewnątrz tej sesji. Procesy uruchomione na ekranie będą nadal działać, gdy ich okno nie będzie widoczne, nawet jeśli zostaniesz rozłączony.,
Tmux #
Tmux jest nowoczesną alternatywą dla GNU screen. Dzięki Tmux możesz również utworzyć sesję i otworzyć wiele okien wewnątrz tej sesji. Sesje Tmux są trwałe, co oznacza, że programy działające w tmux nadal działają, nawet jeśli zamkniesz terminal.
podsumowanie #
aby uruchomić polecenie w tle, Dołącz&
na końcu polecenia.
kiedy uruchamiasz polecenie w tle, nie musisz czekać, aż zakończy się, zanim będziesz mógł wykonać kolejne.