kill – 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 Uniksie 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 obsłużyć taki sygnał lub zignorować. Program kill jako argument otrzymuje jednoznaczny identyfikator procesu (PID).
Program kill może przesyłać procesom różne sygnały, najczęściej używane to:
- 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 odpowiednio go obsłużyć. Sygnały SIGKILL, SIGSTOP, SIGCONT są informacją dla jądra systemu, które musi podjąć odpowiednie kroki (program nie ma możliwości obsłużenia tych sygnałów). 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. Zwykły użytkownik może wysyłać sygnały jedynie do swoich procesów, natomiast superużytkownik (administrator, zwykle root) może przesłać dowolny sygnał do każdego procesu.
Jeżeli zakończony proces posiada procesy potomne (normalne lub w stanie zombie), to zostają one zaadaptowane przez init (PID 1).
Przykłady
Procesowi o numerze 1234 można przesłać sygnał SIGTERM na dwa 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 /bin/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 systemu, bo uległ awarii, można posłużyć się programem top. Jeżeli proces „nie chce” się zamknąć po wysłaniu sygnału SIGTERM, można go unicestwić przez wysłanie SIGKILL:
$ kill -KILL 1234
$ kill -9 1234
killall
Program killall jest rozszerzeniem kill. W niektórych wersjach Uniksa takich jak Solaris polecenie killall jest wywoływane w momencie zamykania systemu. Przesyła sygnał SIGTERM do wszystkich procesów.
W innych systemach 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óry działa analogiczne do killall.
$ pkill /bin/jakis_proces
xkill
Jeżeli w systemie uruchomiono serwer X Window System, 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, a korzystając z PowerShella także Stop-Process[1]. Polecenie kill jest dostępne w instalowanym na Windows Cygwinie.
Linki zewnętrzne
- Podręcznik dla kill (ang.)
- Podręcznik dla killall (ang.)
- Podręcznik dla pkill (ang.)
- Podręcznik dla xkill (ang.)
- Podręcznik dla taskkill (ang.)
Przypisy
- ↑ Using the Stop-Process Cmdlet [online], technet.microsoft.com [dostęp 2017-11-24] (ang.).