3 stycznia 2019

Linux – zarządzanie procesami.

W tym wpisie zajmiemy się narzędziami, które pozwolą nam na kontrolowaniem uruchamianych procesów w systemie Linux. Większość przedstawionych narzędzi będzie dotyczyć powłoki bash lecz pojawią się również aplikacje, które umożliwią nam zarządzanie zadaniami w trybie graficznym. Tak by nie przedłużać przechodzimy do tematu wpisu.

Narzędzie ps pozwala nam na wyświetlenie listy wszystkich procesów, które są aktualnie wykonywane przez system. Narzędzie te pobiera informacje z systemu plików /proc W bazie tej każdy proces ma swoje odzwierciedlenie. Aby wyświetlić wszystkie możliwe parametry narzędzia wydaj polecenie: ps –help all

Wydanie samego polecenia ps bez żadnego parametru uwidoczni nam tylko procesy skojarzone z danym terminalem (TTY – ang. TeleTYpewriter).

image1

 

Jak widać powyżej nie uzyskaliśmy zbyt wielu informacji (tylko 3 procesy) tak więc by ten stan zmienić poniżej przedstawię kilka przykładów użycia narzędzia, które pozwolą nam na uzyskanie bardziej szczegółowych danych o tym co w danej chwili jest w systemie uruchomione. Lecz przed tym jeszcze krótkie wprowadzenie o tym jak narzędzie ps przedstawia nam dane (tak byśmy rozumieli to co nam na ekranie się pojawi).

Podczas korzystania z narzędzia ps przedstawiane dane (rodzaj prezentowanych danych zależy od użytych przełączników) będą zgrupowane w tabeli. Poniżej zestawienie nagłówków tabeli oznaczające parametry procesu:

      • USER – właściciel procesu,
      • PID – Process ID – identyfikator danego procesu, używany do jego identyfikacji co ważne w tym samym czasie PID nie może być przydzielony dwóm różnym procesom,
      • %CPU – procentowe użycie procesora
      • %MEM –procentowe użycie pamięci
      • VSZ – przydzielona pamięć wirtualna w kB,
      • RSS – przydzielona pamięć fizyczna w kB,
      • TTY – identyfikator terminala procesu. Zapis ? oznacza brak skojarzenia z terminalem.
      • STAT – status procesu. Oznaczenia statusu procesu:
        • R – proces jest aktualnie wykonywany (running),
        • S – proces uśpiony, oczekiwanie na jego uruchomienie (sleep),
        • T – proces zatrzymany (stopped, np. CTRL-Z)
        • Z – zombie process – proces niewłaściwie zamknięty przez proces nadrzędny (proces rodzica bądź proces macieżysty)
      • START – czas uruchomienia procesu,
      • TIME – użycie procesora wyrażona w czasie,
      • COMMAND – nazwa komendy/procesu oraz jego parametry,
      • NI – wartość priorytetu nice (o tym później).

 

Uzbrojeni w tą wiedzę możemy przejść do kilku przykładów.

Aby wyświetlić wszystkie procesy, które są powiązane z terminalami użyj komendy: ps a

image2

 

Oczywiście w systemie istnieją procesy, które w żaden sposób z TTY nie są powiązane tak więc aby również uzyskać informację o tych procesach użyj polecenia: ps ax

image3

 

Aby powyższe dane nieco wzbogacić użyj polecenia: ps auxw Dodanie przełącznika u spowoduje dodanie informacji na temat użytkownika z którym dany proces jest skojarzony natomiast przełącznik w jest odpowiedzialny za wyświetlenie parametrów linii poleceń procesu (do polowy linii). Aby wyświetlić pełne dane niezależnie od długości skorzystaj z flagi ww (polecenie przyjmie postać: ps auxww)

image4

 

Aby zaś uzyskane wyniki procesów zawęzić do konkretnego użytkownika (w przykładzie użytkownik luk) skorzystaj z polecenia: ps u -U <nazwa_użytkownika>

image5

 

Aby uzyskane wyniki posortować np. według użycia procesora można skorzystać z polecenia: axuk -pcpudozwolona jest również komenda: ps aux –sort -pcpu Sortowanie jest wykonane malejąco aby uzyskać efekt odwrotny przed flagą pcpu zamiast znaku  (minus) użyj znak + (plus).

image6

 

Oczywiście opcji sortowania jest bardzo wiele, wszystko zależy od informacji jakie chcemy uzyskać wszystkie dostępne opcje sortowania zostały umieszczone w linku poniżej (wersja angielska): http://www.freebsd.org/cgi/man.cgi?query=ps&manpath=SuSE+Linux/i386+11.3

Przeglądając wyniki uzyskane dzięki narzędziu ps dojdziemy do wniosku, że uruchomionych i działających procesów w systemie jest bardzo wiele aby odszukać tylko te, które w danej chwili nas interesują można skorzystać z poleceń przedstawionych na poniższym zrzucie. Przykład odnalezienia procesu przeglądarki Mozilla Firefox oraz edytora tekstu Libre Writer. Na zrzucie poniżej zostały ukazane również numer PID szukanych procesów – odpowiednio dla przeglądarki Mozilla Firefox – 2404 oraz Libre Writer – 2514Numery tych procesów wykorzystamy za chwilkę przy opisie następnego narzędzia jakim jest program top.

image7

 

Wiele z procesów w systemie Linux zresztą jak w każdym innym systemie jest uruchamiana przy starcie systemu inne zaś są uaktywniane już przez samych użytkowników w momencie pracy z systemem i uruchamiania kolejnych zadań czy programów. Uruchomiony proces może być odpowiedzialny za uruchamianie innych zadań, taki proces staje się wówczas procesem nadrzędnym bądź macierzystym dla procesów, które zostały uruchomione w wyniku jego działania. O procesach, które leżą niżej w hierarchii od procesu macierzystego mówimy, że są to procesy potomne. W systemie Linux takim najważniejszym procesem jest proces init, będący rodzicem wszystkich innych procesów. Proces ten ma zawsze przypisaną wartość PID równą 1. Aby przejrzeć całą hierarchię uruchomionych procesów i dodatkowo poznać, który proces jest nadrzędny a który potomny należy skorzystać z polecenia: pstree.

image8

 

Narzędzie to dysponuje dodatkowymi przełącznikami, które pozwalają nam na definicję uzyskiwanych danych do najczęściej wykorzystywanych poleceń należą:

pstree <użytkownik> – wyświetla drzewo procesów danego użytkownika – przykład wyświetlenia procesów użytkownika luk

image9

 

pstree <PID> – rozpoczyna budowanie drzewa od procesu z zdefiniowanym numerem PID – w przykładzie proces NetworkManager,

image10

 

pstree -p – do informacji o nazwie procesów dołączane są informacje o numerach PID tychże procesów – ten sam przykład co powyżej,

image11

 

pstree -H <PID> – użycie flagi H spowoduje podświetlenie procesu,

image12

 

pstree -n – spowoduje włączenie sortowanie według numerów PID.

image13

 

Dostępnych jest jeszcze parę przełączników działających z narzędziem pstree aby je poznać skorzystaj z pomocy programu: pstree –help.

Zadaniem aplikacji top tak samo jak omówionego narzędzia ps oraz pstree jest przedstawienie nam aktualnego stanu systemu. Stan ten w przeciwieństwie do programu ps jest aktualizowany na bieżąco. Oznacza to, że uruchamiając program top na żywo mamy podgląd na stan uruchamianych i działających już procesów. Działanie narzędzia kontrolujemy poprzez zastosowanie odpowiednich przełączników, które dodawane są podczas uruchamiania narzędzia lecz mamy również możliwość definiowania stanu wyświetlanych informacji poprzez dobór odpowiednich skrótów.

Poniżej przykład uruchomienia narzędzia top bez żadnych parametrów (opis wyświetlanych informacji za chwilę).

image14

 

Sposób prezentacji danych uzyskanych dzięki narzędziu top możemy kontrolować jak już wspomniałem w dwojaki sposób. Tak więc w pierwszej kolejności przedstawię wykorzystanie narzędzia z parametrami dodawanymi podczas wywołania programu zaś w dalszej części opisu skupię się na skrótach.

Pierwszy przykład będzie dotyczył wykorzystania znanych nam już numerów PID procesów programów Mozilla Firefox oraz Libre Writer. Numery PID procesów poznaliśmy dzięki narzędziu ps. Aby mieć stały wgląd na to co dzieje się z uruchomionymi aplikacjami możemy włączyć monitorowanie ich stanu poprzez wykorzystanie polecenia: top -p <PID_procesu> Po wywołaniu polecenia zostaną wyświetlone tylko informacje odnoszące się do zdefiniowanych numerów PID procesów. W naszym przypadku chcemy monitorować stan dwóch aplikacji tak więc polecenie przyjmie postać: top -p 2404, 2514 (numery PID oddzielamy przecinkami). Wywołanie komendy spowoduje wyświetlenie stanu procesu przeglądarki Firefox oraz stanu procesu edytora tekstu Writer.

image15

 

Aby włączyć monitorowanie procesów konkretnego użytkownika należy skorzystać z flagi -u po której to podajemy nazwę użytkownika. Wyświetlenie działających procesów użytkownika luk wywołamy po wydaniu komendy: top -u luk

image16

 

Aby zaś stan procesów zapisać do zewnętrznego pliku by później zająć się ich analizą do polecenia topnależy dodać parametr -b. Poniżej przykład polecenia nakazującego zapis stanu procesów użytkownika luk do zewnętrznego pliku procesy_user_luk.txt – polecenie: top -b -n 3 -u luk > procesy_user_luk.txt Użyty dodatkowy parametr -n nakazuje wykonanie zapisu trzech stanów.

image17

 

Dodatkowy przełącznik -d pozwala na zdefiniowanie czasu odświeżania i tak aby np. odświeżyć widok co 2 sekundy 10 razy skorzystaj z polecenia: top -n 10 -d 2 Parametr -i odpowiedzialny jest za wyłączenie pokazywania nieaktywnych procesów zaś flaga -H umożliwia włączenia pokazywania wątków procesów.

Podczas pracy narzędzia top możliwe jest skorzystanie z skrótów, które pozwolą nam w sposób interakcyjny wpłynąć na wynik uzyskiwanych informacji. Co warto zaznaczyć podczas zabawy z programem top możemy spowodować, że system nasz zacznie pracować niestabilnie. Aby wykluczyć opcję takiego zachowania systemu narzędzie top możemy uruchomić w trybie bezpiecznym w którym to opcje potencjalnie niebezpieczne zostaną wyłączone. Aby uruchomić top w trybie secure wydaj polecenie: top -s

Podczas działania narzędzia top następujące skróty (klawisze) są aktywne:

h – wyświetla pomoc programu,

d (bądź s) – zmienia czas odświeżania,

spacja – natychmiastowe odświeżenie ekranu,

strzałki – przewijanie ekranu (dostępne są również klawisze: Page Up, Page Down, Home oraz End),

n – pozwala na zdefiniowanie ilości wyświetlanych procesów (0 – pokazuje wszystkie),

f – pozwala na zdefiniowanie wyświetlanych informacji oraz na sposobie ich reprezentacji. Po wciśnięciu f na nowo otwartym ekranie za pomocą spacji włączamy/wyłączamy określony parametr procesu zaś po wybraniu prawej strzałki dany element możemy przemieszczać definiując w ten sposób kolejność prezentowania danych (sortowanie wyłączamy lewą strzałką),

M – sortowanie procesów według zajmowanej pamięci,

N – sortowanie procesów według PID-u,

P – sortowanie procesów według użycia CPU (domyślne),

T – sortowanie procesów według czasu,

k – zabicie procesu. Po wciśnięciu klawisza zostaniemy poproszeni o podanie numeru PID interesującego nas procesu a w kroku kolejnym będziemy musieli określić sygnał jaki ma zostać wysłany by dany proces zamknąć. Domyślna wartość sygnału to 15 jeżeli użyjesz wartości 9 zabicie procesu będzie bardziej „brutalne”,

r – zmienia wartość priorytetu (nice) działającego procesu, ustalenie wartości poniżej 0 wymaga uruchomienia narzędzia przez użytkownika root (o priorytetach procesów dowiesz się więcej za chwilę),

W – zapisanie konfiguracji narzędzia top,

– przełącza narzędzie top do widoku wielu okien (4) w każdym oknie możemy zdefiniować inne zasady wyświetlania informacji (okno wybieramy przy użyciu klawisza g).

 

Opisałem jak sterować wyświetlaniem informacji lecz nie powiedziałem nic o danych jakie informacje narzędzie top potrafi nam dostarczyć. Tak więc nadrabiam zaległości.

Wszystkie informacje pozyskane po uruchomieniu aplikacji są zgrupowane w kolumnach. Nad definicją nagłówków kolumn tabeli mamy ukazane informacje ogólne.

image18

 

Wśród ukazanych danych możemy odszukać informację o:

Linia pierwsza: top – to informacja o aktualnej dacie i godzinie; czas uruchomienia systemu (up 14 min); liczbę użytkowników (2 users); średnie obciążenie (load average),

Linia druga: Tasks – to informacja o liczbie wszystkich zadań (160 total); zadań aktualnie uruchomionych (1 running); zadań uśpionych (159 sleeping); zadań zatrzymanych (0 stopped); zadań zombie – nieprawidłowo zamkniętych (0 zombie),

Linia trzecia: %Cpu(s) – to informacje odnoszące się do procesora: us – czas użytkownika; sy – czas systemu; ni – czas nice; id – czas bezczynności; wa – czas operacji wejścia/wyjścia; hi – czas obsługi przerywań sprzętowych; si – czas obsługi przerywań programowych,

Linia czwarta: Mem – to informacja o pamięci (jednostka kB): pamięć całkowita (total); pamięć wykorzystana (used); pamięć wolna (free); bufor (buffers),

Linia piąta: Swap – to informacja o pliku wymiany (jednostka kB): rozmiar całkowity (total); użycie (used); wolne (free); pamięć podręczna (cached Mem).

 

Natomiast nagłówki tabeli dostarczają nam następujących danych (informacje te odnoszą się do konkretnego zadania; część informacji domyślnie jest wyłączona aby włączyć ich wyświetlanie skorzystaj z klawisza f):

PID – identyfikator procesu,

PPID – identyfikator procesu rodzica,

USER – właściciel procesu/zadania,

UID – identyfikator właściciela procesu (0 oznacza użytkownika root),

PR – priorytet zadania,

NI – wartość parametru nice,

VIRT – wykorzystywany rozmiar pamięci wirtualnej,

RES – wykorzystywany rozmiar pamięci fizycznej,

SHR – wykorzystywany rozmiar pamięci współdzielonej,

S – stan procesu – poszczególne oznaczenia literowe (podobnie jak w przypadku narzędzia ps) oznaczają: S – proces uśpiony; Z – proces zombie; R – proces uruchomiony; T – proces zatrzymany,

%CPU – procent czasu procesora,

%MEM – procent wykorzystywanej przez proces pamięci fizycznej,

TIME+ – całkowity czas procesora poświęcony zadaniu,

COMMAND – polecenie uruchamiające dane zadanie bądź proces.

 

Narzędziem bardzo podobnym do aplikacji top jest program htop. Program również w czasie rzeczywistym pokazuje nam stan uruchomionych procesów.

image19

 

Narzędzie to umożliwia nam sterowanie wyświetlanymi danymi za pomocą klawiszy funkcyjnych od F1 do F10. Program daje nam możliwość wyszukania danego procesu, użycia filtrów, ukazania drzewa procesów, sortowania, zmianę parametru nice a także zabicie danego procesu. Dodatkowo nad tabelą przedstawione są dane ogólne – tj.: użycie procesora; wykorzystanie pamięci i pliku wymiany; liczbę uruchomionych zadań; średnie obciążenie systemu po upływie 1, 5 i 15 minut; czas pracy systemu.

Uruchomienie narzędzia poprzez dodanie w wierszu poleceń odpowiednich parametrów umożliwia nam wstępne zdefiniowanie uzyskiwanych informacji:

-d <sekunda> – określenie czasu odświeżania,

-u <użytkownik> – wyświetlenie procesów zdefiniowanego użytkownika,

-p <PID> – wyświetlenie zadania o określonej wartości numeru PID (gdy chcesz wyświetlić więcej zadań PID-y oddziel od siebie przecinkami),

-s <rodzaj_sortowania> – wyświetlenie danych posortowanych według ustalonej kolumny, pełna nazwa kolumn dostępna po wydaniu polecenia: htop –sort-key=help

 

Dużą zaletą narzędzia (niż omówionego programu top) jest w pełni interaktywny sposób zarządzania procesami za pomocą klawiszy funkcyjnych.

Innymi programami, którymi możemy posłużyć się celem obserwacji uruchomionych procesów są programy ksysguard, który jest dedykowany dla środowiska KDE oraz gtop przeznaczony dla środowiska GNOM.

W wpisie tym kilka razy pojawił się termin nice, parametr ten określa z jaki priorytetem jest uruchomiony dany proces. Zakres tego priorytetu (ang. niceness level) rozciąga się od -20 do 19 przy czym wartość -20 oznacza priorytet najwyższy zaś wartość 19 priorytet najniższy. Aby zmodyfikować wartość z jakim dane zadanie jest uruchamiane możemy skorzystać z narzędzia nice.

Użycie narzędzia jest bardzo proste wystarczy wydać polecenie: nice <nazwa_zadania> Jako przykład niech posłuży nam takie polecenie: nice mcedit Wydanie komendy spowoduje uruchomienie programu mcedit. Sprawdźmy zatem wartość parametru nice z jakim to narzędzie zostało uruchomione.

W pierwszej kolejności za pomocą polecenia: ps auxw | grep mcedit zidentyfikujemy numer procesu PID uruchomionego programu mcedit. A następnie za pomocą komendy: top -p <numer_PID> -n 1 -bwyświetlimy dane dotyczące procesu o zadanym numerze PID (użyta flaga -b w narzędziu top spowoduje wyświetlenie informacji narzędzia top bez czyszczenia okna). Jak widać po poniższym zrzucie w poleceniu została użyta wartość 2754 ponieważ jest to PID zadania mcedit.

image20

 

Z zrzutu tego uzyskamy również informację o poszukiwanym parametrze nice. Jak już pewnie Czytelniku zauważyłeś wartość parametru nice zadania mcedit wynosi 10. Wartość ta jest domyślną wartością z jaką będą uruchamiane programy z wykorzystaniem narzędzia nice.

Pytanie brzmi – Czy proces poznania wartości przypisanej do parametru nice musi być wykonany w ten sposób, czy nie można tego wykonać prościej? Odpowiedź na to pytanie brzmi – Można wykonać to łatwiej przy użyciu tylko jednego narzędzia jakim jest ps (wybacz Czytelniku, że trochę sprawę skomplikowałem ale zależało mi na tym byś poznał jak najwięcej zastosowań omawianych narzędzi). Tak więc ustalony parametr nice poznasz szybciej dołączając do narzędzia ps flagę -l Po wydaniu polecenia: ps -l a | grep mcedit stosowna informacja zostanie zawarta w wyświetlonych danych. Jak można zauważyć wartość parametru nice poznana po wydaniu polecenia pokrywa się z tą poznaną dzięki narzędziu top i wynosi 10.

image21

 

Użycie przełącznika -l w narzędziu ps pozwala nam na dołączenie do już wyświetlanych danych informacji dodatkowych (bardziej szczegółowych). Dodatkowe kolumny, które zostaną zawarte po użyciu flagi -l to informacje o:

UID – identyfikator właściciela procesu,

PPID – identyfikator procesu macierzystego,

PRI i NI – priorytety procesów,

WCHAN – pozwala sprawdzić jaką funkcję systemowy jądra wywołał proces.

 

OK wiemy, że wywołanie narzędzia nice bez zdefiniowanie parametru procesu włącza dane zadanie z domyślnie zdefiniowaną wartością parametru nice ustawioną na 10. A co gdybyśmy dane zadanie chcieli uruchomić z wartością niższą bądź wyższą? A by wykonać to zadanie do składni polecenia wywołującego dany program musimy dołączyć parametr -n po którym to definiujemy wartość nice. Użycie np. takiej komendy: nice -n -20 mcedit spowoduje uruchomienie narzędzia mcedit z możliwie najwyższym do zdefiniowania priorytetem -20. Poniżej na zrzucie przedstawiono efekt wydanej komendy, jak widać sprawdzenie (oba wyżej opisane sposoby) tylko utwierdza nas w przekonaniu, że narzędzie mcedit zostało uruchomione z najwyższą wartością parametru nice.

image22

 

Wiemy już jak uruchomić zadanie z żądanym priorytetem – A co w przypadku w którym chcemy zmienić priorytet już uruchomionego zadania?

Aby wykonać to zadanie musimy skorzystać z polecenia: renice <wartość_parametru_nice> <PID_procesu> Tak więc aby zmienić wartość parametru nice z -20 na 10 uruchomionego zadania mcedit (kontynuujemy przykład zaprezentowany wyżej) o numerze PID równym 2499 należy wydać polecenie: renice +10 2499 Po wydaniu komendy sprawdźmy efekt jej wydania.

image23

 

Jak można zauważyć powyżej wydanie polecenia renice zmieniło priorytet zadania mcedit. Nowa wartość parametru nice wynosi 10.

To jeszcze jeden przykład – zmiana parametru nice z 10 na -5 (pamiętaj, że zmiana wartości poniżej 0 wymaga praw użytkownika root).

image24

 

Uważny czytelnik na pewno zauważył, że nie jest to jedyny sposób dokonania modyfikacji parametru nice. Poznane narzędzia top oraz htop również oferują nam taką możliwość.

Aby zredukować ilość danych ograniczmy się do wyświetlenia informacji dotyczących tylko zadania mcedit. Aby to wykonać wydajmy polecenie: top -p 2499 Po wydaniu polecenia będziemy mieli wgląd w parametry tylko tego zadania.

Po uruchomieniu narzędzia top aby dokonać modyfikacji parametru nice wciskamy klawisz r. Na postawione pytanie – o numer procesu PID klikamy enter (numer PID zadania mcedit jest ustawiony domyślnie) gdyby tak się nie stało wprowadzamy go ręcznie.

image25

 

Po podaniu informacji o numerze PID definiujemy wartość parametru nice. W naszym ćwiczeniu decydujemy się parametr ten ustawić na wartość 7.

image26

 

Po zatwierdzeniu możemy sprawdzić stan parametru nice za pomocą znanych nam poleceń. Jak widać poniżej wartość nice wynosi 7.

image27

 

Nieraz zdarza się, że na wskutek nieprawidłowego działania programu musimy zakończyć jego proces. Z reguły uruchamiając jakieś zadanie w terminalu aby je zakończyć należy posłużyć się kombinacją klawiszy Ctrl+C lecz w pewnych sytuacjach zabieg ten może okazać się niewystarczający. Wtedy musimy sięgnąć po bardziej drastyczne środki i proces zakończyć ręcznie. Aby zakończyć zadanie należy skorzystać z polecenia: kill <nazwa_bądź_numer_sygnału> PID

Z uruchomionymi zadaniami możemy porozumieć się poprzez wysłanie do nich odpowiedniego sygnału. Sygnały te są określone i zdefiniowane (nazwa + numer) a pełną ich listę do użycia z narzędziem killpoznamy po wydaniu polecenia: kill -l

image28

 

Najczęściej używane sygnały to:

sygnał 2 – SIGINT – przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + C,

Sygnał 3 – SIGQUIT – przerwanie wykonania procesu wywołane wciśnięciem klawiszy Ctrl + \ sygnał ten dodatkowo nakazuje wykonanie obrazu pamięci procesu,

sygnał 9 – SIGKILL – zabicie procesu,

sygnał 15 – SIGTERM – miękkie zakończenie procesu, sygnał ten jest domyślnie zdefiniowany gdy nie wskażemy w poleceniu innego,

sygnał 19 – SIGSTOP – zatrzymanie wykonywania procesu wywołane wciśnięciem klawiszy Ctrl + Z, tak zatrzymany proces możemy następnie wznowić wykorzystując do tego narzędzie fg bądź bg.

 

Tak więc aby zabić dany proces należy wydać polecenie: kill <PID> Poniżej przykład zabicia procesu przeglądarki Firefox.

image29

 

Do zidentyfikowania numeru PID przeglądarki zostało wykorzystane narzędzie pgrep (jeszcze jeden dodatkowy sposób by poznać PID procesu). Narzędzie pgrep zostało wywołane z parametrem -l który jest odpowiedzialny za wyświetlenie pełnej nazwy procesu. Narzędzie to świetnie sprawdza się w sytuacji w której znamy nazwę uruchomionego procesu. Wywołanie polecenie bez flagi -l spowoduje wyświetlenie samej wartości numeru procesu.

Aby wysłać określony sygnał do procesu w poleceniu kill definiujemy jego wartość. Wartość ta może być podana w sposób numeryczny bądź słowny. Aby nakazać wysłanie sygnału SIGKILL, zabijając w ten sposób proces możemy skorzystać z polecenia przedstawionego na poniższym zrzucie (tradycyjnie już zabijamy proces przeglądarki).

image30

 

Aby zakończyć wszystkie procesy o danej nazwie należy skorzystać z polecenia: killall <nazwa_procesu>. Narzędzie to posiada kilka przydatnych przełączników:

-u <użytkownik> <proces> – zabicie wszystkich procesów danego użytkownika, brak definicji procesu spowoduje zabicie wszystkich procesów zdefiniowanego użytkownika,

-o <czas> – zabicie procesów starszych niż zdefiniowany czas,

-y <czas> – zabicie procesów młodszych niż zdefiniowany czas. Czas określamy za pomocą następujących zmiennych: s dla sekund; m dla minut; h dla godzin; d dla dni; w dla tygodni; Mdla miesięcy; y dla lat,

-s <sygnał> – określenie wysyłanego sygnału zamiast domyślnego SIGTERM,

-I – brak rozróżniania wielkości liter dla definiowanych procesów.

 

Narzędziem pozwalającym nam na zabicie procesu bez znajomości jego PID-u lecz z wykorzystaniem nazwy procesu jest program pkill. Zabicie danego programu odbywa się po wydaniu komendy: pkill <nazwa_procesu>

Zabicie danego procesu możemy również wykonać za pomocą omówionych narzędzi top oraz htop.

W systemie Linux występuje katalog /proc W katalogu tym zawarte są informacje o działających procesach. Reprezentacja danego procesu jest realizowana poprzez zapis katalogu. Nazwa katalogu odpowiada numerowi PID procesu. W danym katalogu są umieszczone pliki, które opisują status danego procesu, np.: plik cmdline zawiera polecenie uruchamiające dany proces a plik status informacje o stanie procesu.

Katalog /proc możemy przeglądać za pomocą opisanego w poprzednim wpisie dotyczącym powłoki bash polecenia ls . Jak widać poniżej proces przeglądarki Firefox o numerze PID 2445 ma swoje odzwierciedlenie w folderze /proc w formie katalogu o nazwie 2445.

image31

 

System plików /proc jest całkowicie wirtualny co oznacza, że nie jest on nigdzie zapisany na dysku a istnieje tylko w pamięci. Za utworzenie i zapis informacji odpowiada jądro systemu a jego głównym zadaniem jest dostarczenie informacji o systemie.

Poniżej przedstawiam listę co ważniejszych pozycji znajdujących się w /proc.

/proc/cpuinfo – wykaz informacji o procesorze: model, wydajność, itp.,

/proc/consoles – informacja o terminalach,

/proc/crypto – zabezpieczenia kryptograficzne,

/proc/devices – lista urządzeń,

/proc/filesystems – informacja o dostępnych systemach plików,

/proc/interrupts – lista przerwań wykorzystywanych przez system,

/proc/ioports – porty wejścia/wyjścia,

/proc/kcore – obraz pamięci systemu,

/proc/meminfo – wykaz użycia pamięci fizycznej i swapu.

/proc/modules – lista modułów wykorzystywana przez system,

/proc/net – informacje o protokołach sieciowych,

/proc/partitions – lista partycji,

/proc/stat -statystyki systemu,

/proc/uptime – czas pracy systemu,

/proc/version – wersja jądra,

/proc/vmstat – statystyki użycia pamięci wirtualnej.

 

Informacje zawarte w tych plikach można oczywiście odczytywać np. przy pomocy narzędzia cat lecz nie należy ich edytować gdyż może to doprowadzić do niestabilnej pracy systemu.

Poniżej przykład użycia narzędzia cat celem uzyskania informacji o wykorzystaniu pamięci.

image32

 

Co warto nadmienić szereg narzędzi korzysta z informacji zawartych w /proc. Przeglądając poszczególne pliki możemy uzyskać bardzo wiele informacji o naszym systemie choć co trzeba przyznać forma prezentacji tych danych jest czasem mało atrakcyjna.

To tej pory przedstawiłem narzędzia, które działają w konsoli systemu Linux jest również kilka programów, które potrafią zarządzać procesami w trybie graficznym. Ja bym chciał przedstawić dwa. Do takich standardowych programów należy: gnome-system monitor (by wywołać program w terminalu należy wpisać jego nazwę).

image33

 

Monitor systemu pozwala nam na: zatrzymanie i wznowienie danego procesu, zatrzymanie procesu, zmianę jego priorytetu a także na uzyskanie podstawowych informacji o danym zadaniu (dostępne po kliknięciu na Właściwości).

Programem graficznym o podobnej funkcjonalności co systemowy Monitor systemu jest: lxtask

image34

 

I na koniec jeszcze kilka prostych programów, które z procesami są powiązane bezpośrednio lub pośrednio a pozwalają na uzyskanie przydatnych informacji.

Pierwsze narzędzie to w, wydanie komendy pozwoli nam przejrzeć procesy każdej powłoki wszystkich zalogowanych użytkowników.

image35

 

Narzędzie to podaje nam następujące informacje:

górny pierwszy wiersz (od lewej) – aktualny czas; czas pracy systemu; liczbę zalogowanych użytkowników oraz średnie obciążenie systemu – trzy wartości: ostatnia minuta, ostatnie pięć minut, ostatnie piętnaście minut,

kolumny to informacja o: użytkowniku; identyfikatorze terminala; komputerze z którego nastąpiło logowanie; czasie w którym nastąpiło logowanie; czasie bezczynności; czasie zużycia procesora (JCPU oraz PCPU) oraz uruchomionym zadaniu.

 

Narzędzie xload w sposób graficzny przedstawia nam obciążenie procesora (oś Y) w funkcji czasu (oś X). Użyta flaga -update ustawia odświeżanie (domyślnie 10 sekund).

image36

 

Polecenie free poda nam zużycie pamięci (jednostka kB).

 

image37

 

Opcje:

-s <sekunda> – ciągłe działanie programu, odświeżanie o ustaloną wartość,

-b – zmiana jednostki na bajty,

-m – zmiana jednostki na megabajty,

-t – podsumowanie.

 

Zadaniem narzędzia fuser jest wyświetlenie nazw procesów, które korzystają z podanych plików bądź katalogów. Po wywołaniu narzędzia z parametrem -v nakazującym wyświetlenie bardziej szczegółowych informacji i podaniu lokacji uzyskamy listę procesów korzystających z tejże lokacji. Poniżej w przykładzie ukazano procesy korzystające z katalogu domowego użytkownika luk.

image38

 

Uzyskane dane dostarczają nam informacji o użytkowniku, PID-zie procesu, nazwie procesu a także rodzaju uzyskanego dostępu. Rodzaj ustanowionego dostępu jest określany za pomocą symboli literowych:

c – katalog bieżący,

e – uruchomiony plik wykonywalny,

f – otwarty plik, pomijane w   domyślnym   trybie wyświetlania,

r – katalog root,

m – mmap-owany plik lub biblioteka dzielona.

 

Wywołanie narzędzia bez flagi -v wyświetli tylko numer procesów PID i rodzaj ustanowionego dostępu.

Programu możemy również użyć do monitorowania otwartych połączeń sieciowych. Poniżej przykład sprawdzenia dostępności serwera FTP.

image39

 

Programu możemy również użyć do zabicia procesów odnoszących się np. do danego katalogu. Wydanie polecenia: fuser -v -k -i . spowoduje zabicie wszystkich procesów odnoszących się do katalogu domowego użytkownika przy czym dołączenie flagi -i powoduje, że jesteśmy pytani o potwierdzenie wykonania wyłączenia każdego zadania z osobna. Pominięcie parametru -i spowoduje automatyczne zabicie wszystkich procesów.

image40

 

 


 

Bibliografia:

 

http://www.cyberciti.biz/faq/unix-linux-killall-command-examples-usage-syntax/

http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

http://www.thegeekstuff.com/2012/02/linux-fuser-command/

http://www.computerhope.com/unix/ubash.htm

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

Ostatnio zmieniany czwartek, 04 luty 2016 21:14
——————————————————————————-
Jest to wierny zrzut treści ze strony: http://slow7.pl/linux/item/104-dogadac-sie-z-linuxem-zarzadzanie-procesami
Share

You may also like...

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *