Jak uruchomić polecenie Linux w tle i odłączyć proces w terminalu

Jak uruchomić polecenie Linux w tle i odłączyć proces w terminalu
W tym przewodniku dowiemy się, jak uruchomić polecenie w tle i jak odłączyć procesy od terminalu.

Wymagania wstępne:

Aby wykonać kroki w tym przewodniku, potrzebujesz następujących elementów:

  • Funkcjonalny system Linux. Dowiedz się więcej o konfigurowaniu maszyny wirtualnej Ubuntu na VirtualBox.
  • Dostęp do użytkownika nie-root za zgodą Sudo.

Uruchamianie procesów z terminalu

Za każdym razem, gdy uruchamia polecenie, procesy są odradzane pod terminalem. Jeśli terminal jest zamknięty, wszystkie powiązane procesy są automatycznie zakończone. W niektórych sytuacjach może to być niewygodne. Na przykład:

  • Przytłaczająca ilość danych wyjściowych i komunikatów błędów/diagnostycznych
  • Przypadkowe zamknięcie terminalu, co powoduje zakończenie potencjalnie procesów krytycznych misji itp.

Aby rozwiązać te problemy, istnieje kilka opcji:

  • Uruchamianie procesów w tle
  • Odłączanie procesów od terminalu

Procesy działające w tle nie przytłaczają wyjścia terminala. Ponadto terminal może uruchomić dodatkowe polecenia. W przypadku procesów odłączonych nie zakończą się, nawet jeśli terminal jest zamknięty.

Uruchamianie procesów w tle

W wielu przypadkach polecenie może zająć sporo czasu. Zasadniczo użytkownik jest zmuszony czekać, aż polecenie zakończy. Na przykład, gdy używasz edytora tekstu, powłoka jest niedostępna do momentu zamknięcia edytora.

Aby zademonstrować, używamy polecenia „Tak”:

$ Man Tak

Metoda 1:

Istnieje kilka sposobów, na których możemy wysłać proces działający na tło.

Najpierw zatrzymujemy proces bez zakończenia. Aby to zrobić, uruchom następujące polecenie i naciśnij „Ctrl + Z”:

$ Tak "Hello World"> /dev /null

Teraz uruchom polecenie „BG”, aby wysłać proces w tle:

$ BG

Po wepchnięciu na tło proces wznawia. Poniższe polecenie zawiera wszystkie działające zadania w tle:

$ Jobs

Metoda 2:

W poprzedniej metodzie proces zaczął działać na pierwszym planie. Zatrzymaliśmy proces, wysłaliśmy go na tło, a następnie wznowiliśmy. Zamiast tego możemy uruchomić proces bezpośrednio w tle.

Aby to zrobić, dodaj znak „&” na końcu polecenia:

$ Tak "Oh Long Johnson"> /dev /null &

Tutaj wywołane procesy automatycznie działają w tle. Aby zweryfikować, sprawdź listę zadań podstawowych:

$ Jobs

Metoda 3:

Możemy również uruchomić procesy w tle za pomocą TMUX, potężnego multipleksera, który może zarządzać wieloma sesjami terminali w jednym oknie. Nie jest wstępnie zainstalowany w Linux. Jest jednak dostępny dla wszystkich głównych dystrybucji Linux. Dowiedz się więcej o instalacji Tmux w Linux.

W poniższym przykładzie używamy TMUX do pingowania celu i rejestrowania danych wyjściowych:

$ tmux new -d 'ping -c 9 127.0.0.1> ping.dziennik'

Plik dziennika sprawdza, czy polecenie uruchomi się pomyślnie, czy nie:

$ cat ping.dziennik

To tylko jeden przykład tego, co Tmux może zrobić. Dowiedz się więcej o Tmux z przykładami.

Zwracanie zadań na pierwszy plan

Jeśli chcesz zwrócić pracę na pierwszym planie, używamy polecenia „FG”. Potrzebujemy również numeru zadania z polecenia zadania.

Najpierw określ pracę, którą chcesz wnieść na pierwszy plan:

$ Jobs

Teraz użyj polecenia „FG”:

$ FG %

Odłączanie procesów od terminalu

Każdy proces powiązany z terminalem jest zakończony po zamknięciu terminalu, niezależnie od tego, czy działa na pierwszym planie, czy na tle. Aby uniknąć zakończenia procesu, odłączamy proces docelowy od terminalu/powłoki.

Metoda 1:

Aby wypędzić proces, najpierw potrzebujemy procesu w tle:

$ Tak "qWerty"> /dev /null &

Sprawdź listę uruchamiających zadań w tle:

$ Jobs

Zwróć uwagę na numer seryjny docelowego zadania w tle. Teraz użyj polecenia „odejście”, aby oddzielić je od terminala:

$ Odnotowanie %

Docelowe zadanie powinno teraz zniknąć z listy zadań:

$ Jobs

Jednak nadal możesz zobaczyć proces działający w tle:

$ Ps Aux

Metoda 2:

Innym sposobem odłączenia procesu od terminalu nadrzędnego jest użycie polecenia „Nohup”. Utrzymuje proces działa w tle nawet po zamknięciu terminalu.

Wykorzystanie „Nohup” jest następujące:

$ nohup I

Sprawdź, czy zadanie jest tworzone pomyślnie:

$ Jobs

Metoda 3:

Ta metoda całkowicie odłącza proces docelowy. To bardziej skuteczny sposób odłączenia aplikacji GUI.

Na przykład, aby uruchomić Firefox i całkowicie odłączyć go od terminala, użyj następującego polecenia:

$ Firefox /dev/null &

Tutaj:

  • /dev/null to specjalne urządzenie w Linux, które pozbywa się wszelkich zapisanych do niego danych.
  • W poprzednim polece /dev/null. Dowiedz się więcej o innych sposobach korzystania z /dev /null.

Wniosek

Wykazaliśmy różne sposoby uruchamiania procesu w tle. Zaprezentowaliśmy również sposoby odłączenia procesu od terminalu nadrzędnego. Te techniki mogą być przydatne za każdym razem, gdy pracują z terminalem lub uruchamiając skrypt.

Jeśli chcesz uruchomić określone polecenia w określonym wzorze, możemy go odciążyć jako usługę SystemD. W przypadku maszyn zdalnych możemy również użyć narzędzi innych firm, takich jak Ansible, aby zautomatyzować prawie wszystko.

Szczęśliwy komputer!