Kill (polecenie): Różnice pomiędzy wersjami

Z Wikipedii, wolnej encyklopedii
[wersja nieprzejrzana][wersja nieprzejrzana]
Usunięta treść Dodana treść
poprawiony link do wikipedii en
→‎Przykłady: poprawka linku do "top
Linia 41: Linia 41:
W systemach Unix lista procesów może być bardzo długa. PID znajduje się w drugiej kolumnie.
W systemach Unix lista procesów może być bardzo długa. PID znajduje się w drugiej kolumnie.


Aby sprawdzić, który proces pochłania najwięcej zasobów sytemu, bo uległ awarii można posłużyć się programem [[top (program)|top]]. Jeżeli proces "nie chce" się zamknąć po wysłania sygnału SIGTERM, można go unicestwić przez wysłanie SIGKILL:
Aby sprawdzić, który proces pochłania najwięcej zasobów sytemu, bo uległ awarii można posłużyć się programem [[top (Unix)|top]]. Jeżeli proces "nie chce" się zamknąć po wysłania sygnału SIGTERM, można go unicestwić przez wysłanie SIGKILL:
$ '''kill -KILL 1234'''
$ '''kill -KILL 1234'''
$ '''kill -9 1234'''
$ '''kill -9 1234'''

Wersja z 22:25, 27 mar 2007


kill – (ang. zabić) program komputerowy w systemach Unix i Linux pozwalający na przesyłanie sygnałów do procesów pracujących w systemie operacyjnym. Domyślnie program kill wysyła do procesu sygnał nakazujący mu zakończenie pracy. Wbrew nazwie sugerującej natychmiastowe przerwanie pracy, polecenie powoduje poprawne zamknięcie procesu i zachowanie wszelkich wewnętrznych danych. W systemach takich jak Unix każdy uruchamiany program działa jako proces. Jeżeli, któryś z nich ulegnie awarii, polecenie kill pozwala na zakończenie jego pracy. Niektóre programy w Unixie nie mają interfejsu użytkownika , bo pracują w tle (demony) i jedynym sposobem na zakończenie ich działania jest użycie programu kill.

Działanie kill

Sygnał jest wysyłany poprzez wywołanie odpowiedniej funkcji w jądrze systemu operacyjnego. Proces może zignorować taki sygnał, jeżeli działa w sposób niepoprawny. Program kill jako argument otrzymuje identyfikator procesu (PID), który go jednoznacznie identyfikuje. Jeżeli proces posiada procesy potomne polecenie kill je również zamyka.

Program kill może przesyłać procesom różne sygnały, których lista może być bardzo długa. Najważniejsze z nich stanowią:

  • SIGTERM – poprawne zamknięcie procesu,
  • SIGKILL – unicestwienie procesu co może powodować utratę wszystkich zawartych w nim danych (nie ma możliwości przechwycenia tego sygnału przez proces),
  • SIGSTOP – zatrzymanie procesu bez utraty danych,
  • SIGCONT – ponowne uruchomienie zatrzymanego procesu.

Domyślnie wysyłany jest sygnał SIGTERM, który powoduje bezpieczne zamknięcie procesu. Poprawnie napisany program potrafi przechwycić taki sygnał i odpowiednie go obsłużyć. Sygnały SIGKILL, SIGSTOP, SIGCONT są informacją dla jądra systemu, które musi podjąć odpowiednie kroki. SIGKILL pozwala na usunięcie z systemu procesu, który uległ awarii i przestał odpowiadać, ale oznacza utratę wszystkich zawartych w nim informacji. Unicestwianiem procesu zajmuje się jądro systemu, które zwalnia wszystkie zajęte przez program zasoby.

Każdy proces posiada swojego właściciela. Sygnały wysyłane kill są przetwarzane w oparciu o uprawnienia użytkownika. Bez odpowiednich uprawnień nie można zabić cudzego procesu. Tylko superużytkownik (zwykle root) może przesłać dowolny sygnał do każdego procesu

Przykłady

Procesowi o numerze 1234 można przesłać sygnał SIGTERM na trzy sposoby:

$ kill 1234
$ kill -TERM 1234 

1234 jest PID-em procesu, który można odczytać poleceniem ps:

$ ps aux

Przykładowa lista procesów zwrócona przez polecenie ps:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   1948   644 ?        Ss   Dec24   0:01 init [2]
root         2  0.0  0.0      0     0 ?        S    Dec24   0:00 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Dec24   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S<   Dec24   0:00 [events/0]
root      4019  0.0  0.0   2560   916 ?        Ss   Dec24   0:00 /sbin/syslogd
root      4253  0.0  0.0   2676   880 ?        Ss   Dec24   0:00 /usr/sbin/inetd
root      4586  0.0  0.0   1572   488 tty1     Ss+  Dec24   0:00 /sbin/getty 384
janek     5982  0.0  0.2   5592  3088 pts/1    Ss   02:08   0:00 /ibn/bash
janek     1234  0.0  0.2   4156  7652 ?        Ss   02:08   0:00 /bin/jakis_proces
janek     6000  0.0  0.0   3428   992 pts/1    R+   02:12   0:00 ps aux

W systemach Unix lista procesów może być bardzo długa. PID znajduje się w drugiej kolumnie.

Aby sprawdzić, który proces pochłania najwięcej zasobów sytemu, bo uległ awarii można posłużyć się programem top. Jeżeli proces "nie chce" się zamknąć po wysłania sygnału SIGTERM, można go unicestwić przez wysłanie SIGKILL:

$ kill -KILL 1234
$ kill -9 1234

killall

 Osobny artykuł: killall.

Program killall jest rozszerzeniem kill. W niektórych wersjach Unixa takich jak Solaris polecenie killall jest wywoływane w momencie zamykania systemu. Przesyła sygnał SIGTERM do wszystkich procesów.

W innych systemu z rodziny Unix takich jak IRIX czy Linux albo FreeBSD program killall działa odmiennie. Można mu podać nazwę procesu, który ma otrzymać sygnał:

$ killall /bin/jakis_proces

pkill

W niektórych systemach takich jak Solaris w wersji większej niż 7 czy Linux dostępny jest program pkill, które działa analogiczne do killall.

$ pkill /bin/jakis_proces

xkill

Jeżeli w systemie uruchomiono serwer X-Windows program xkill pozwala na zamknięcie go poprzez kliknięcie na jego okno.

Windows

W systemach z rodziny Windows do przerywania pracy procesów można użyć polecenia taskkill. Polecenie kill jest dostępne w instalowanym na Windows Cygwinie.

Linki zewnętrzne