#ubuntu #linux #computerscience #beginners

Istnieją dwa rodzaje procesów:

  1. Procesy pierwszoplanowe

Procesy pierwszoplanowe to te, które można zobaczyć w interfejsie użytkownika i wymagają pewnego rodzaju wkładu użytkownika.

Na przykład edytor tekstu.

2. Procesy w tle

Procesy w tle to takie, które nie wymagają żadnej formy wprowadzania danych przez użytkownika i działają automatycznie w tle.

Na przykład, załóżmy, że chcemy uruchomić aplikację Spring Boot Gradle za pomocą polecenia gradle bootrun.

W tym momencie proces się rozpoczął, jednakże nie ma możliwości uzyskania dostępu do terminala.

Natomiast jeśli chcecie przenieść proces w tle, musicie nacisnąć skrót klawiszowy Ctrl + Z.

W powyższym przykładzie widzicie, że proces jest teraz przeniesiony w tło i zwraca identyfikator procesu (PID) wraz ze stanem wstrzymania.

Ale jakie znaczenie tutaj ma stan zawieszenia?

Stan zawieszenia oznacza, że proces nie został zakończony, ale znajduje się w stanie wstrzymania.

*W porządku, więc kiedy używamy Ctrl + Z, proces jest tymczasowo zatrzymywany.

A co by było, gdybyście chcieli ponownie przenieść ten proces na pierwszy plan?

Aby przenieść proces na pierwszy plan, używamy polecenia fg.

W powyższym przykładzie ponownie Wasz proces wskoczył na pierwszy plan za pomocą polecenia fg i zmienił się  status na kontynuowany z PID.

A co, jeśli chcemy zakończyć ten proces?

Aby zakończyć proces, wciskamy Ctrl + .

W powyższym przykładzie widoczne jest działanie po wciśnięciu klawiszy Ctrl + C, aby zakończyć działający proces.

Do tej pory widzieliśmcie, jak uruchomić proces na pierwszym planie, przenieść go na drugi plan i ponownie przenieść go na pierwszy plan.

A co by było, gdybyście chcieli rozpocząć proces w tle?

Aby uruchomić proces w tle, wszystko, co musicie zrobić, to napisać & na końcu Waszego polecenia.

Na przykład – załóżmy, że chcecie uruchomić gedit w tle.

Na powyższym przykładzie możecie widać wykorzystanie polecenia gedit & i uruchomienie procesu w tle, otrzymując w zamian identyfikator procesu (PID).

Proces przebiega więc w tle, ale jak możecie to potwierdzić?        

Aby sprawdzić wszystkie procesy w Waszym obecnym terminalu, użyjcie polecenia jobs.

Na powyższym przykładzie widać, że o nazwie gedit działa teraz w tle.

Widzieliście już, jak przenieść proces na pierwszy plan, ale co, jeśli istnieje wiele procesów?

Aby przenieść określony proces na pierwszy plan, musicie wykorzystać następującą składnie:

fg #{process_number}

Aby wykorzystać to w praktyce, pokażę Wam jak przenieść  waszą pracę na pierwszy plan.

W powyższym przykładzie wykorzystane zostały polecenia fg # 1, dzięki czemu ponownie przeniesiecie proces gedit na pierwszy plan.

Przyjrzyjmy się teraz, jak można sterować procesami za pomocą sygnałów?

Do tego, wykorzystajcie polecenia kill do wysyłania sygnałów do programów.

Istnieje wiele różnych sygnałów, które można wysłać za pomocą polecenia kill. Możecie wyświetlić listę tych sygnałów za pomocą polecenia kill -l.

Oto kilka najczęściej używanych sygnałów:

SygnałWartośćOpis
SIGHUP1Wykryto zawieszenie się na kontrolującym terminalu lub śmierć kontrolującego proces
SIGINT2Przerwanie z klawiatury Jest to akcja wykonywana po naciśnięciu Ctrl + C
SIGQUIT3Wyjdź z klawiatury
SIGKILL9Natychmiast zakończ proces bez czasu na czyszczenie
SIGTERM15Służy do przerywania procesu. Jest to domyślna akcja z poleceniem KILL
SIGCONT19,18,25Służy do kontynuowania procesu po zatrzymaniu
SIGSTOP17,19,23Służy do zatrzymywania procesu

Sygnały SIGKILL i SIGSTOP nie mogą zostać przechwycone, zablokowane ani zignorowane.

Aby zabić dowolny proces za pomocą polecenia kill, potrzebujecie PID odpowiedniego procesu.

Możecie użyć nazwę sygnału lub wartości sygnału wraz z PID, aby zabić dowolny proces.

Teraz załóżmy, że będziecie chcieli zabić aplikację do zrzutów ekranu.

W powyższym przykładzie najpierw szukaliście PID za pomocą polecenia ps -ef | grep screenshot.

Wykorzystaliście polecenie kill wraz z wartością sygnału, a także nazwą sygnału, aby zabić aplikację do zrzutu ekranu.

A co by było, gdybyście chcieli zabić proces nazwą, a nie PID?

Aby zabić proces o nazwie, musicie użyć pkill {regular_expression}.

Na przykład, użyliście polecenia pkill fire. To polecenie po wykonaniu zabije każdy proces zaczynający się od ognia.

A co, jeśli chcecie zabić wszystkie wystąpienia uruchomionej aplikacji? Czy jest jakiś sposób, żebyście mogli to zrobić za jednym razem?

Możecie zabić wiele instancji aplikacji za pomocą polecenia killall.

Główną różnicą między poleceniem killall a poleceniem pkill jest to, że musicie podać dokładną wartość polecenia killall.

W powyższym przykładzie wykorzystane zostały polecenia pkill i killall, aby zabić gedit. Podczas wykonywania zauważyliście, że kiedy wydaliście komendę killall niepełną nazwą, killall nie był w stanie znaleźć procesów.

Chodziło o to, w jaki sposób możecie kontrolować procesy.

Dajcie znać, jeśli macie jakieś sugestie lub pytania!

Yash Sugandh

Entuzjasta projektowania oprogramowania, architektury i Linuksa. Wierzę, że współpraca ma wartość. Często dwa umysły są lepsze niż jeden, dlatego praca w zespole w duchu współpracy jest ważna, gdy pojawia się taka potrzeba. Nienawidzę powtarzalnych zadań i wymyślam rozwiązanie, które je zautomatyzuje.