Jak uruchamiać i kontrolować procesy w tle w Linuksie

  • Dave McKay

    @TheGurkha

  • 24 września 2019 r., 8:00 AM EDT
Fatmawati Achmad Zaenuri/. com

użyj powłoki bash w Linuksie do zarządzania procesami na pierwszym planie i w tle. Możesz użyć funkcji i sygnałów kontroli zadań Bash, aby zapewnić większą elastyczność w uruchamianiu poleceń. Pokażemy Ci jak.

wszystko o procesach

za każdym razem, gdy program jest wykonywany w systemie operacyjnym Linux lub Unix-like, uruchamiany jest proces., „Proces” to nazwa wewnętrznej reprezentacji wykonującego program w pamięci komputera. Dla każdego aktywnego programu istnieje proces. W rzeczywistości istnieje proces prawie wszystkiego, co jest uruchomione na komputerze. Obejmuje to Komponenty graficznego środowiska graficznego (GDE), takie jak GNOME lub KDE, oraz demony systemowe uruchamiane przy starcie.

dlaczego prawie wszystko co działa? Cóż, wbudowane w Bash, takie jak cd, pwd i alias, nie muszą mieć uruchamianego procesu (lub” spawned”), gdy są uruchamiane., Bash wykonuje te polecenia w instancji powłoki Bash, która jest uruchomiona w oknie terminala. Polecenia te są szybkie właśnie dlatego, że nie muszą uruchamiać procesu, aby je wykonać. (Możesz wpisać help w oknie terminala, aby zobaczyć listę wbudowanych Bash.)

Reklama

procesy mogą być uruchamiane na pierwszym planie, w takim przypadku przejmują terminal do czasu zakończenia lub mogą być uruchamiane w tle., Procesy działające w tle nie dominują w oknie terminala i można w nim kontynuować pracę. A przynajmniej nie dominują w oknie terminala, jeśli nie generują wyjścia ekranu.

niechlujny przykład

uruchomimy prosty ping śledzenie. Przejdziemy do ping domeny Geeka. Zostanie to wykonane jako proces pierwszoplanowy.

ping www.howtogeek.com

otrzymujemy oczekiwane wyniki, przewijając w dół okno terminala. Nie możemy zrobić nic więcej w oknie terminala, gdyping jest uruchomiony., Aby zakończyć polecenie naciśnij Ctrl+C.

Ctrl+C

widoczny efekt Ctrl+C jest podświetlony na zrzucie ekranu. ping podaje krótkie podsumowanie, a następnie zatrzymuje się.

Reklama

powtórzmy to. Ale tym razem uderzymy Ctrl+Zzamiast Ctrl+C. Zadanie nie zostanie zakończone. Będzie to zadanie w tle. Dostajemy kontrolę nad oknem terminalu zwróconym nam.,

ping www.howtogeek.com
Ctrl+Z

widoczny efekt uderzeniaCtrl+Z jest podświetlony na zrzucie ekranu.

tym razem powiedziano nam, że proces został zatrzymany. Zatrzymanie nie oznacza zakończenia. To jak samochód na znaku stop. Nie złomowaliśmy go i nie wyrzuciliśmy. Wciąż jest w drodze, stoi, czeka, by jechać. Proces ten jest teraz pracą w tle.

poleceniejobs wyświetli listę zadań, które zostały uruchomione w bieżącej sesji terminala., A ponieważ zadania są (nieuchronnie) procesami, możemy również użyć polecenia ps, aby je zobaczyć. Użyjmy obu komend i porównajmy ich wyniki. Użyjemy opcjiT (terminal), aby wyświetlić listę tylko procesów uruchomionych w tym oknie terminala. Zauważ, że nie ma potrzeby używania myślnika - z opcją T.

jobs
ps T

jobs polecenie mówi nam:

  • : liczba w nawiasach kwadratowych jest numerem zadania., Możemy użyć tego, aby odnieść się do zadania, gdy musimy go kontrolować za pomocą poleceń Job control.
  • +: znak plusa+ pokazuje, że jest to zadanie, które zostanie wykonane, jeśli użyjemy polecenia job control bez określonego numeru zadania. Nazywa się to domyślnym zadaniem. Domyślne zadanie jest zawsze Ostatnio dodane do listy zadań.
  • Stopped: proces nie jest uruchomiony.
  • ping www.howtogeek.com: wiersz poleceń, który uruchomił proces.,

polecenieps mówi nam:

  • PID: identyfikator procesu. Każdy proces ma unikalny identyfikator.
  • TTY: pseudo-teletype (okno terminala), z którego został wykonany proces.
  • STAT: status procesu.
  • TIME: ilość czasu procesora zużywanego przez proces.
  • COMMAND: polecenie, które uruchomiło proces.

są to wspólne wartości dla kolumny STAT:

  • D: nieprzerwany sen. Proces jest w stanie oczekiwania, zwykle czeka na wejście lub wyjście i nie może zostać przerwany.,
  • I: bezczynność.
  • R: Bieganie.
  • S: przerwany sen.
  • T: zatrzymany przez sygnał kontroli pracy.
  • Z: Proces zombie. Proces został zakończony, ale nie został” oczyszczony ” przez proces macierzysty.
Reklama

Po wartości w kolumnie STAT może nastąpić jeden z następujących dodatkowych wskaźników:

  • <: zadanie o wysokim priorytecie (nie miłe dla innych procesów).
  • N: Low-priority (miły dla innych procesów).
  • l: proces ma strony zablokowane w pamięci (zwykle używane przez procesy czasu rzeczywistego).,
  • s: lider sesji. Lider sesji to proces, który uruchomił grupy procesów. Powłoka jest liderem sesji.
  • l: proces wielowątkowy.
  • +: proces pierwszoplanowy.

widzimy, że Bash ma stanSs. Wielkie litery „S” mówią nam, że powłoka Bash śpi i jest przerywana. Jak tylko będziemy tego potrzebować, odpowie. Małe litery ” s ” mówią nam, że powłoka jest liderem sesji.

polecenie ping ma stan T., Oznacza to, że ping został zatrzymany przez sygnał kontrolny zadania. W tym przykładzie był to Ctrl+Z, który umieściliśmy w tle.

polecenieps T ma stanR, co oznacza running. + wskazuje, że proces ten należy do grupy foreground. Tak więc polecenie ps T jest uruchomione na pierwszym planie.

polecenie bg

bg jest używane do wznowienia procesu w tle., Może być używany z numerem pracy lub bez niego. Jeśli używasz go bez numeru zadania, zadanie domyślne zostanie przeniesione na pierwszy plan. Proces nadal działa w tle. Nie można wysłać do niego żadnych danych wejściowych.

Reklama

Jeśli wydamy polecenie bg, wznowimy nasze ping polecenie:

bg

ping command wznawia się i widzimy przewijanie wyjścia w oknie terminala jeszcze raz. Zostanie wyświetlona nazwa polecenia, które zostało uruchomione ponownie., Jest to podświetlone na zrzucie ekranu.

ale mamy problem. Zadanie jest uruchomione w tle i nie akceptuje wprowadzania danych. Jak to powstrzymamy? Ctrl+C nic nie robi. Możemy go zobaczyć, gdy go wpisujemy, ale zadanie w tle nie odbiera tych naciśnięć klawiszy, więc ciągle pinguje wesoło.

Reklama

w rzeczywistości jesteśmy teraz w dziwnym trybie mieszanym. Możemy wpisać w oknie terminala, ale to, co wpisujemy, jest szybko usuwane przez przewijanie wyjścia z polecenia ping. Wszystko, co napiszemy, wchodzi w życie z góry.,

aby zatrzymać nasze zadanie w tle musimy przenieść je na pierwszy plan, a następnie je zatrzymać.

polecenie fg

fg spowoduje przeniesienie zadania w tle na pierwszy plan. Podobnie jak polecenie bg, może być używane z numerem zadania lub bez niego. Użycie go z numerem zadania oznacza, że będzie działać na określonym zadaniu. Jeśli jest używany bez numeru zadania, używane jest ostatnie polecenie, które zostało wysłane w tle.

jeśli wpiszemyfg nasze polecenieping zostanie przeniesione na pierwszy plan., Znaki, które wpisujemy są pomieszane z wyjściem polecenia ping , ale są one obsługiwane przez powłokę tak, jakby zostały wprowadzone w linii poleceń jak zwykle. I w rzeczywistości, z punktu widzenia powłoki Bash, to jest dokładnie to, co się stało.

fg
Reklama

i teraz, gdy mamy pingKomenda uruchomiona ponownie na pierwszym planie, możemy użyć Ctrl+C, aby ją zabić.

Ctrl+C

musimy wysłać odpowiednie sygnały

to nie było do końca ładne., Ewidentnie uruchamianie procesu w tle działa najlepiej, gdy proces nie generuje danych wyjściowych i nie wymaga danych wejściowych.

ale, niechlujny czy nie, nasz przykład zrobił to:

  • umieszczając proces w tle.
  • Przywracanie procesu do stanu działającego w tle.
  • zwracanie procesu na pierwszy plan.
  • zakończenie procesu.

gdy używaszCtrl+C ICtrl+Z , wysyłasz sygnały do procesu. Są to skrócone sposoby użycia polecenia kill., Istnieją 64 różne sygnały, które kill może wysłać. Użyj kill -l w wierszu poleceń, aby je wyświetlić. kill nie jest jedynym źródłem tych sygnałów. Niektóre z nich są podnoszone automatycznie przez inne procesy w systemie

Oto niektóre z powszechnie używanych.

  • SIGHUP: Signal 1. Automatycznie wysyłane do procesu, gdy terminal, w którym jest uruchomiony, jest zamknięty.
  • SIGINT: Signal 2. Wysłane do procesu, który trafiłeś Ctrl+C. Proces zostaje przerwany i nakazany do zakończenia.,
  • SIGQUIT: Signal 3. Wysyłane do procesu, jeśli użytkownik wysyła sygnał zakończenia Ctrl+D.
  • SIGKILL: Signal 9. Proces jest natychmiast zabijany i nie będzie próbował zamknąć czysto. Proces nie idzie w dół z wdziękiem.
  • SIGTERM: Signal 15. Jest to domyślny sygnał wysyłany przez kill. Jest to standardowy sygnał zakończenia programu.
  • SIGTSTP: Signal 20. Wysyłane do procesu, gdy używasz Ctrl+Z. Zatrzymuje proces i umieszcza go w tle.,

musimy użyć poleceniakill do wydawania sygnałów, które nie mają przypisanych kombinacji klawiszy.

dalsza kontrola zadania

proces przeniesiony w tło za pomocą Ctrl+Z jest umieszczony w stanie stopped. Musimy użyć polecenia bg, aby uruchomić go ponownie. Uruchomienie programu jako proces działający w tle jest proste. Dołącza ampersand & na końcu wiersza poleceń.,

Reklama

chociaż najlepiej jest, aby procesy w tle nie zapisywały się do okna terminala, użyjemy przykładów, które tak robią. Musimy mieć coś na zrzutach ekranu, do czego możemy się odnieść. To polecenie uruchomi niekończącą się pętlę jako proces w tle:

while true; do echo „How-To Geek Loop Process”; sleep 3; done&

otrzymujemy numer zadania i ID procesu id procesu. Nasz numer pracy to 1, A Identyfikator procesu to 1979. Możemy użyć tych identyfikatorów do kontrolowania procesu.,

Reklama

wyjście z naszej nieskończonej pętli zaczyna pojawiać się w oknie terminala. Tak jak poprzednio, możemy użyć linii poleceń, ale wszystkie polecenia, które wydamy są przeplatane z wyjściem z procesu pętli.

ls

aby zatrzymać nasz proces możemy użyćjobsaby przypomnieć sobie, jaki jest numer zadania, a następnie użyćkill.

jobs zgłasza, że nasz proces to zadanie numer 1. Aby użyć tej liczby z kill musimy poprzedzić ją znakiem procentowym %.,

jobs
kill %1

kill wysyłaSIGTERM sygnał, numer sygnału 15, do procesu i jest zakończony. Po naciśnięciu klawisza Enter wyświetlany jest status zadania. Wyświetla listę procesu jako ” zakończony.”Jeśli proces nie odpowiada na polecenie kill, możesz go podnieść. Użyj kill z SIGKILL, numer sygnału 9. Po prostu umieść numer 9 pomiędzykill poleceniem numer zadania.,

kill 9 %1

rzeczy, które omówiliśmy

  • Ctrl+C: wysyłaSIGINT, sygnał 2, do procesu—jeśli przyjmuje wejście—i mówi, aby zakończył.
  • Ctrl + D: wysyłaSISQUIT, sygnał 3, do procesu-jeśli przyjmuje wejście – i każe mu zamknąć.
  • Ctrl+Z: wysyłaSIGSTP, sygnał 20, do procesu i mówi mu, aby zatrzymał (zawiesił) i stał się procesem w tle.
  • jobs: wyświetla zadania w tle i pokazuje ich numer.
  • BG job_number: uruchamia ponownie proces w tle., Jeśli nie podasz numeru zadania, używany jest ostatni proces, który został przekształcony w zadanie w tle.
  • FG job_number: przenosi proces w tle na pierwszy plan i uruchamia go ponownie. Jeśli nie podasz numeru zadania, używany jest ostatni proces, który został przekształcony w zadanie w tle.
  • wiersz poleceń&: dodanie ampersand& na końcu wiersza poleceń wykonuje to polecenie jako uruchomione zadanie w tle.
  • kill %job_number: wysyłaSIGTERM, sygnał 15, do procesu, aby go zakończyć.,
  • kill 9% job_number: wysyłaSIGKILL, sygnał 9, do procesu i kończy go nagle.

RELATED: How To Kill Processes From the Linux Terminal

Dave McKay
Dave McKay po raz pierwszy użył komputerów, gdy perforowana taśma papierowa była w modzie i od tego czasu programuje. Po ponad 30 latach pracy w branży IT, obecnie pracuje jako dziennikarz technologiczny., W trakcie swojej kariery pracował jako niezależny programista, menedżer międzynarodowego zespołu programistów, kierownik projektów usług IT, a ostatnio jako Inspektor Ochrony Danych. Dave jest ewangelistą Linuksa i orędownikiem open source.Czytaj całość „

Leave a Comment