Powrót do bloga

Zarządzanie procesami w systemie Linux - przewodnik po użyciu ps, kill i nice

Zarządzanie procesami w systemie Linux - przewodnik po użyciu ps, kill i nice

Wprowadzenie

Kiedy większość z nas korzysta z komputerów, uruchamiamy różne aplikacje. Te aplikacje są uruchamiane przez programy zwane serwerami lub systemami operacyjnymi. Istnieje wiele różnych rodzajów serwerów, które działają na różne sposoby. Jednym z nich jest Linux. Linux uruchamia aplikacje w postaci procesów.

W systemie Linux każdą aplikację nazywamy „procesem”. Serwer jest w stanie zarządzać niskopoziomowym aspektem cyklu życia procesu. Jako użytkownik możesz potrzebować interakcji z serwerem, aby manipulować niektórymi aspektami wyższego poziomu. Możesz komunikować się z systemem operacyjnym i zarządzać nim za pomocą różnych narzędzi. Istnieje wiele poleceń, których możesz użyć do modyfikacji różnych aspektów i funkcji serwera. Oto łatwy do naśladowania samouczek, jak łatwo skonfigurować serwer oparty na systemie Linux na Ubuntu. Możesz dowiedzieć się więcej o tym, jak zainstalować stos LAMP (Linux, Apache, MySQL, PHP).

Ten przewodnik skupia się na tym, jak używać ps, kill i nice do zarządzania procesami w systemie Linux.

Przeglądanie uruchomionych procesów w systemie Linux

  • top

Na początek, jedną z najbardziej podstawowych komend, które powinieneś znać, jest top. To narzędzie pomaga zwizualizować, które procesy są aktualnie uruchomione w systemie. Oto jak będzie wyglądać po uruchomieniu:

top command output

 

Na samej górze wyniku znajdują się statystyki systemu. Dają one informacje o takich rzeczach jak obciążenie systemu i liczba zadań. W tym przykładzie można ustalić, że istnieje jeden uruchomiony proces i 55 procesów bezczynnych. Procesy bezczynne lub uśpione to te, z których obecnie nie korzystasz. Oznacza to, że nie zajmują one zasobów systemu. Na koniec, w dolnej części okna, możesz zobaczyć wszystkie uruchomione procesy wraz ze statystykami zużycia.

  • htop

Zanim użyjesz tego polecenia, musisz zainstalować je z repozytoriów, wpisując i uruchamiając następujące polecenie:

Gdy już go masz, możesz go użyć do wyświetlenia podobnych informacji, jak w przypadku top. Główną różnicą jest to, że dzięki poleceniu htop otrzymujesz wynik bardziej przyjazny dla użytkownika:

htop command output

Jak widać, ten wynik jest łatwy do śledzenia i interpretacji.

Używanie ps do listowania procesów

Chociaż możesz używać wyżej wymienionych poleceń do przeglądania uruchomionych procesów, nie zawsze mogą one obejmować wszystkie scenariusze. Na szczęście mamy do dyspozycji silniejsze i bardziej elastyczne narzędzie. Jest to polecenie ps.

Zobaczmy, co zobaczysz, jeśli uruchomisz to polecenie w obecnej postaci:

ps command output

W tym wyjściu możesz zobaczyć wszystkie procesy, które są uruchomione w powiązaniu z bieżącym użytkownikiem i sesją. Jednak to nie daje zbyt wielu informacji.

Jeśli chcesz uzyskać bardziej całościowy widok wszystkich procesów uruchomionych w systemie, musisz użyć argumentu. Argument pozwala zobaczyć wszystkie procesy należące do wszystkich użytkowników, niezależnie od powiązania z terminalem. Wynik pojawia się również w bardzo przyjaznym dla użytkownika i łatwym do odczytania formacie. Oto przykład:

ps aux

Z drugiej strony, możesz również zwizualizować te informacje w formacie drzewa. Tutaj, jak zobaczysz, widoczne stają się również relacje hierarchiczne:

output in tree format

W tym przykładzie widać, jak kthreadd jest wyświetlany jako rodzic kolejnych procesów.

  • Co to są identyfikatory procesów?

Jako użytkownik systemu Linux lub Unix powinieneś wiedzieć o identyfikatorach procesów. Znane również jako PID, są to unikalne tożsamości przypisywane każdemu procesowi przez system. Dzięki tym tożsamościom serwer śledzi każdy poszczególny proces. Aby poznać PID danego procesu, musisz użyć polecenia pgrep, w ten sposób:

Podczas uruchamiania systemu zaczyna działać pierwszy proces. Ten proces nazywa się init. Jako mechanizm domyślny, proces init otrzymuje PID o wartości „1”. Możesz sprawdzić PID tego procesu w następujący sposób:

Proces init jest następnie odpowiedzialny za uruchomienie wszystkich innych programów lub procesów. Co zrozumiałe, kolejne procesy będą miały rosnące lub większe identyfikatory PID.

  • Co to są procesy nadrzędne?

Kolejnym pojęciem, które warto znać, jest proces nadrzędny. Jeśli proces A uruchamia proces B, to proces A jest procesem nadrzędnym dla procesu B. Aby pomóc w ich rozróżnieniu, system przypisuje procesom nadrzędnym identyfikator PPID. Możesz zauważyć ten PPID w nagłówkach kolumn za każdym razem, gdy uruchamiasz dowolne polecenie zarządzania, takie jak top, htop i ps.

  • Czym są relacje rodzic-dziecko?

Jak już wiemy, procesy nadrzędne tworzą procesy potomne. To tworzenie odbywa się w dwóch krokach. Pierwszym z nich jest fork(). Rozpoczyna się ono od utworzenia nowej przestrzeni adresowej. Kopiuje również zasoby procesu nadrzędnego przy użyciu mechanizmu copy-on-write, dzięki czemu są one dostępne także w procesie potomnym. Drugim krokiem jest exec(). Odpowiada on za załadowanie i wykonanie pliku wykonywalnego w nowo utworzonej przestrzeni adresowej.

  • Co się stanie, jeśli proces potomny zakończy działanie przed procesem nadrzędnym?

W takim przypadku proces potomny staje się zombie. Dzieje się tak do momentu, gdy proces nadrzędny pobierze o nim pewne informacje lub poinformuje jądro, że nie potrzebuje powiązanych informacji. Gdy to nastąpi, zasoby, z których korzystał proces, zostaną zwolnione.

  • Co się stanie, jeśli proces nadrzędny zakończy działanie przed procesem potomnym?

W takim scenariuszu system przypisze proces potomny do innego procesu nadrzędnego. Może to być init lub dowolny inny proces.

Wysyłanie sygnałów do procesów w systemie Linux

Możesz sprawić, by dany proces zareagował, wysyłając mu sygnał. Sygnały pomagają w komunikacji z systemem operacyjnym. Możesz użyć sygnału, aby spowodować zakończenie działania aplikacji, jej uruchomienie lub zmodyfikowanie danego zachowania bądź zadania.

  • Używanie PID do wysyłania sygnałów

Jednym z narzędzi, których można użyć do wysyłania sygnałów w systemie Linux, jest kill. Polecenie to, jak sugeruje jego nazwa, pomaga zakończyć lub zabić proces:

To narzędzie wysyła do procesu sygnał TERM, który nakazuje mu zakończenie działania. Polecenie to sprawia, że aplikacja wykonuje czyszczenie i bezproblemowo kończy pracę. W przypadku, gdy program nie wyłącza się płynnie po otrzymaniu sygnału TERM, można przejść bezpośrednio do wysłania sygnału KILL:

Ten sygnał nie trafia do programu. Trafia do jądra systemu operacyjnego. Jądro bezpośrednio zamknie proces. Możesz tego użyć, gdy program ignoruje wysyłane do niego sygnały.

W tym poleceniu możesz również zastąpić nazwę sygnału powiązanym z nim numerem. Na przykład możesz użyć „-15” zamiast „-TERM”. Podobnie możesz zastąpić „-KILL” przez „-9”.

  • Używanie sygnałów do różnych celów

Sygnałów można używać do innych celów niż tylko zabijanie lub kończenie programów. Na przykład jednym z problemów, z którymi możesz się spotkać, jest restartowanie demonów. Za każdym razem, gdy demon otrzyma sygnał rozłączenia lub HUP, zrestartuje się w programach takich jak Apache. Aby to wymusić, możesz użyć następującego sygnału:

To polecenie sprawi, że Apache ponownie załaduje swoją konfigurację. W rezultacie nadal będzie serwować odpowiednią zawartość.

Jeśli chcesz zobaczyć, jakie sygnały możesz wysłać za pomocą narzędzia kill, użyj następującego polecenia:

list of signals

  • Wysyłanie sygnałów według nazwy

Tradycyjnie sygnał wysyła się przy użyciu PID programu. Istnieje jednak możliwość wysyłania sygnałów przy użyciu zwykłej nazwy procesu. Aby to zrobić, można użyć polecenia pkill. Działa ono podobnie do tego, jak działa polecenie pkill. Jedyną różnicą jest to, że pozwala na użycie nazwy procesu:

To polecenie pkill jest odpowiednikiem następującego polecenia kill:

Masz również do dyspozycji polecenie, gdy chcesz wysłać sygnał do każdej instancji zamiast do konkretnego procesu. Poniższe polecenie wyśle sygnał TERM do wszystkich instancji Firefox uruchomionych w systemie:

Dostosowywanie priorytetów procesów

Kolejną rzeczą, którą możesz zrobić za pomocą poleceń systemu Linux, jest dostosowanie priorytetów. Oznacza to, że możesz zdecydować, który proces ma priorytet w Twoim środowisku serwerowym. Mogą istnieć pewne procesy, które uważasz za krytyczne. Inne mogą nie być tak niezbędne. System wykona te drugie programy tylko wtedy, gdy pozostaną wolne zasoby.

Możesz kontrolować priorytet procesów w systemie Linux za pomocą wartości niceness. Ta wartość wskazuje zadania o wysokim priorytecie jako mniej miłe (less nice), a procesy o niskim priorytecie jako bardziej miłe (more nice). Pomyśl o tym w ten sposób: procesy o wysokim priorytecie są mniej miłe, ponieważ zagarniają zasoby. Zadania o niskim priorytecie dzielą się nimi, więc są milsze.

Możesz zobaczyć wartość nice danego procesu po uruchomieniu polecenia top. Wartość ta znajduje się w kolumnie „NI”. Zadania o wysokim priorytecie mają wartości nice w zakresie od „-19/-20”. Procesy o niskim priorytecie mieszczą się w zakresie „19/20”. Zobaczysz coś takiego:

Jeśli chcesz uruchomić proces z osobiście przypisaną wartością nice, wystarczy użyć polecenia nice:

To polecenie zadziała tylko podczas uruchamiania danego programu. Jeśli chcesz zmienić wartość nice programu, który już działa, musisz użyć renice:

Podsumowanie

Jak widać, te narzędzia znacznie różnią się od tych graficznych. W rezultacie mogą być trudne do zrozumienia dla początkujących. Ten przewodnik pomoże Ci zapoznać się z poleceniami. Więcej praktyki pomoże Ci lepiej się ich nauczyć i efektywniej z nich korzystać.

Sprawdź nasze inne zasoby, które pomogą Ci lepiej zarządzać serwerami Linux, w tym samouczki dotyczące konfiguracji serwera Linux do korzystania z uwierzytelniania opartego na kluczach SSH, lokalizowania plików w systemie Linux VPS za pomocą whereis, which, whatis, readlink i find, oraz odczytywania i ustawiania zmiennych środowiskowych i powłoki na serwerze Linux VPS.

Miłej pracy!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev jest projektantem kreatywnym w CloudSigma, skupiającym się na spójnej tożsamości biznesowej przy wykorzystaniu tradycyjnych i innowacyjnych kanałów marketingowych. Biegle łączy wizję artystyczną ze strategicznym marketingiem, tworząc wywierające wpływ narracje marki.

Komentarze

Brak komentarzy. Bądź pierwszy.