Napisane przez mediologia dnia . Wysłane Rozdział 7 - Zarządzanie procesami i zadaniami.

7.3 zakończenie procesu - polecenie kill

 

W jaki sposób możemy komunikować się z procesami ? Z procesami komunikujemy się wysyłając do nich tzw. sygnały. Sygnały mają przyporządkowane numery i nazwy, pisane – to jest informacja do zapamiętania – dużymi literami. Polecenie  kill umożliwia wysyłanie różnych sygnałów zarówno do procesów pierwszo jak i drugoplanowych. Rodzaj sygnału jest określany przez jego numer lub nazwę.  Proces do którego wysyłamy sygnał, jest oznaczany albo przez numer zadania użytkownika albo jego nazwę, jak pamiętamy numer ten poznajemy dzięki poleceniu  jobs , albo przez jego systemowy identyfikator procesów  PID (poznany dzięki poleceniom  ps lub  job  -l). Listę sygnałów możemy wyświetlić na ekranie poprzez wydanie polecenia:

$   kill  -l

 

Najczęściej interesują nas sygnały związane z przerywaniem, zatrzymywaniem i usuwaniem procesów: 

SIGINT -     sygnał nr.  2     -    przerwanie wykonanie procesu wykonane przez użytkownika przy pomocy

klawiatury

 SIGQUIT -     sygnał nr. 3     -  zakończenie wykonywania procesu wykonane przez użytkownika przy pomocy

klawiatury

 SIGKILL -     sygnał nr 9      -    unicestwienie procesu, które bezwarunkowo kończy jego działanie. Nadawcą tego

sygnału musi być właścicielem procesu lub administratorem

 SIGTERM -     sygnał nr. 15     -

 SIGSTOP -     sygnał nr 19   -    zatrzymanie wykonywania procesu, z możliwością późniejszego wznowienia jego

wykonywania. Po wydaniu polecenia  jobs zatrzymany proces zostanie wpisany jako

„stopped”. Wznowienie pracy procesu uzyskujemy za pomocą poleceń  fg lub  bg

 

 Powiążmy teraz kombinacje klawiszy i związane z nimi sygnały. Przy czym trzeba pamiętać, że kombinacje klawiszowe wysyłają sygnał tylko do bieżącego procesu uruchomionego na pierwszym planie. Jest to logiczne, ponieważ w tle możemy mieć uruchomionych wiele zadań.

CTRL + c    wysyła sygnał 2  (SIGINT)

CTRL + \    wysyła sygnał 3 ; (SIGQUIT) na ekranie otrzymamy komunikat: Quit (core dumped)

CTRL + z    wysyła sygnał 19 (SIGSTOP)  ; na ekranie otrzymamy komunikat typu  [1]+ stopped,  przy czym

liczba w nawiasach kwadratowych uruchamiając  może być inna, w zależności od aktualnej liczby zadań

 

 Przećwiczmy nabytą wiedzę o procesach i powiązanych z nimi zadaniach. Ponieważ wiemy, że wykonanie polecenia   ls –R / trwa względnie długo, dlatego to właśnie używając je wielokrotnie nauczymy się stosowania poleceń  kill   fg   jobs. Najpierw utwórzmy zbiór trzech zatrzymanych zadań  ls –R  /  i natychmiast po wyegzekwowaniu zatrzymajmy je przy pomocy kombinacji  CTRL+Z

 

$  ls –R /

CTRL+Z

[1]      Stopped          ls –R /

 

Powtórzmy polecenie jeszcze dwukrotnie tak aby uzyskać:

$  ls –R /

[1]     Stopped          ls  –R  /

[2]     Stopped          ls  –R  /

[3]     Stopped          ls  –R  /

 

Aby usunąć  -stosujemy w tym przypadku sygnał nr 15 -  zadanie nr 1 wykonujemy polecenie:

$   kill  %1

[1]     Terminated          ls –R  /

 

Wykonajmy teraz polecenie jobs:

$  jobs

[2]     Stopped          ls  –R  /

[3]     Stopped          ls  –R  /

 

Widzimy, że zadanie nr 1 zostało skasowane. Zauważmy, że argumentem polecenia   kill jest  %1 gdzie znak procent wskazuje, że  podajemy numer zadania użytkownika, który jest podany w nawiasach kwadratowych po wykonaniu polecenia  jobs, podczas gdy jedynka oznacza zadanie 1.

 

Zakończmy teraz – zabijmy – (sygnał nr 9) zadanie 2:

$   kill     -9     %2

[2]     Killed           ls  -R  /

 

$ jobs

[3]     Stopped            ls  –R  /

 

Zostało ostatnie zadanie. Usuniemy je korzystne z bezwzględnej identyfikacji procesu PID, który poznamy egzekwując polecenie ps.

$ ps

PID               TTY     TIME               CMD

10804           pts/1     0:20              bash

5304            pts/1    0:00             ls –R /

10804           pts/1     0:20               sed

5408             pts/1     0:00               ps

 

Jak widzimy numer procesu zadania ls –R / wynosi 5304, dlatego aby go unicestwić musimy wykonać następujące polecenie:

$ kill  -9  5304

$ jobs

[3]+     Killed          ls –R  /

 

Znajomość  mechanizmów związanych z procesami i zadaniami, ich usuwaniem czy unicestwianiem jest szczególnie cenna dla administratora systemu, np. dzięki tym poleceniom może on usuwać procesy użytkowników nad którymi stracono kontrolę.

 

 

Zarządzanie procesami i zadaniami Rozdział 8.2 Darmowy kurs Linux