11.4 kill

Okazjonalnie programy mogą zachowywać się źle i potrzebne będzie siłowe przywrócenie ich do porządku. Program do tego typu zadań administracyjnych nazywa się kill(1) i może być użyty do manipulowania procesami na kilka różnych sposobów. Najbardziej oczywisty sposób użycia komendy kill (ang. "zabij") - to zabicie procesu. Będziesz potrzebował tej możliwości wtedy, gdy program wymknął się spod kontroli i zużywa zbyt wiele zasobów systemowych, bądź też po prostu masz już dość jego działania.

By zabić proces, musisz znać jego PID albo nazwę. By uzyskać PID, użyj polecenia ps poznanego w poprzednim podrozdziale. Dla przykładu, by zakończyć proces 4747, wydasz następującą komendę:

% kill 4747

Zauważ, że musisz być właścicielem procesu by móc go zabić. Jest to wymóg bezpieczeństwa. Będąć w stanie zakańczać procesy innych użytkowników, mógłbyś narobić niezłego zamieszania. Oczywiście, root może zabić dowolny proces uruchomiony w systemie.

Jest też pewna odmiana polecenia kill zwana killall(1). Program ten robi dokładnie to, na co wskazuje jego nazwa: zabija wszystkie procesy mające określoną nazwę. Jeżeli chcesz zakończyć pracę wszystkich aktualnie uruchomionych edytorów vim, wydasz następującą komendę:

% killall vim

Każda uruchomiona przez ciebie kopia vim'a zostanie w tym momencie zakończona. Użycie powyższej komendy przez root'a spowoduje zabicie wszystkich vim'ów uruchomionych przez dowolnego użytkownika. Podsuwa to pomysł na wykopanie każdego (także i siebie) z systemu:

# killall bash

Czasem zwykły kill nie wystarczy. Niektóre procesy nie posłuchają się nakazu wydanego tym poleceniem i nie umrą na rozkaz. Do takich opornych trzeba będzie użyć bardziej konkretnych argumentów. Jeżeli oporny PID 4747 nie odpowiedział na twoje żądanie zakończenia go, możesz użyć następującego polecenia:

% kill -9 4747

To prawie na pewno zabije proces 4747. Można to samo wykonać dla killall. Taka forma polecenia przesyła do procesu inny sygnał. Zwykły kill przesyła do procesu sygnał SIGTERM (od ang. terminate 'zakańczać'), mówiący by proces zakończył to, co robi, posprzątał po sobie oraz zakończył się. kill -9 wysyła sygnał SIGKILL (kill), po prostu zakańczający proces. Proces nie dostaje wtedy zezwolenia na posprzatanie po sobie, tak więc czasem niedobre rzeczy - jak np. błędy danych - mogą się pojawić przy wysłaniu sygnału SIGKILL. Do twojej dyspozycji jest cała lista sygnałów. Możesz ją uzyskać wpisując:

% kill -l
  1) SIGHUP     2) SIGINT    3) SIGQUIT   4) SIGILL
  5) SIGTRAP    6) SIGABRT   7) SIGBUS    8) SIGFPE
  9) SIGKILL   10) SIGUSR1  11) SIGSEGV  12) SIGUSR2
 13) SIGPIPE   14) SIGALRM  15) SIGTERM  17) SIGCHLD
 18) SIGCONT   19) SIGSTOP  20) SIGTSTP  21) SIGTTIN
 22) SIGTTOU   23) SIGURG   24) SIGXCPU  25) SIGXFSZ
 26) SIGVTALRM 27) SIGPROF  28) SIGWINCH 29) SIGIO
 30) SIGPWR

Przy wywołaniu kill musi zostać użyty numer, zaś z killall może zostać użyty minus wraz z nazwą sygnału “SIG”. Oto kolejny przykład:

% killall -KILL vim

Ostatni sposób użycia kill to zrestartowanie procesu. Wysłanie sygnału SIGHUP spowoduje w większości przypadków, że procesy ponownie przeczytają swoje pliki konfiguracyjne. Przydaje się to wtedy, gdy właśnie dokonaliśmy edycji tych plików.

Grenlandia 2012