Ćwiczenie — kończenie nieprawidłowo działającego procesu
Komputery są niedoskonałe. Wcześniej czy później coś pójdzie nie tak. Dlatego masz pracę jako administrator, to do ciebie należy rozwiązywanie problemów z systemem i usuwanie ich.
Wyobraź sobie, że aplikacja w języku Python powoduje problemy. Być może zajmuje zbyt dużo czasu procesora CPU, a może przestał odpowiadać. W obu przypadkach chcesz zatrzymać aplikację. Aby zidentyfikować proces lub aplikację, możesz użyć poleceń ps
i grep
. Następnie, aby go zatrzymać, możesz użyć polecenia kill
. Przećwiczmy to na maszynie wirtualnej z systemem Linux.
Uruchamianie niewłaściwie zachowującego się procesu
Jeśli zamierzasz zabić proces, potrzebujesz procesu do zabicia. Utwórzmy go.
Wróć do swojego katalogu home, wpisując następujące polecenie:
cd ~
W usłudze Azure Cloud Shell wprowadź następujące polecenie, aby uruchomić edytor
vi
systemu Linux:vi bad.py
vi
jest powszechnie używanym edytorem tekstu, odziedziczonym przez system Linux po systemie Unix. Można go kochać lub nienawidzić, ale użytkownik powłoki Bash musi znać podstawy edytoravi
.Wybierz klawisz i, aby przełączyć edytor
vi
w tryb wstawiania. Następnie wpisz następujący program w języku Python:i = 0 while i == 0: pass
Ten program, gdy jest wykonywany, działa w nieskończonej pętli — ewidentnie nie jest to coś, co chcesz uruchamiać na swoim serwerze.
Wybierz klawisz Esc, aby wyjść z trybu wstawiania. Następnie wpisz następujące polecenie, po czym wybierz klawisz Enter, aby zapisać program i wyjść z edytora
vi
::wq
Pamiętaj o umieszczeniu dwukropka na początku polecenia. Jeśli chodzi o pozostałą część polecenia, litera
w
oznacza „wrtite” („zapisz”), aq
oznacza „quit” („zakończ”).Teraz użyj następującego polecenia, aby uruchomić program i pozostawić go uruchomionego w tle:
python3 bad.py &
Pamiętaj, aby dołączyć znak ampersand (
&
) na końcu polecenia. W przeciwnym razie nie powrócisz do monitu powłoki Bash. W powłoce Bash znak ampersand uruchamia polecenie i wraca do wiersza polecenia, nawet jeśli działanie polecenia nie zostało zakończone.
Nie jest to oczywiste, ale program bad.py działa teraz w tle i kradnie cykle procesora CPU innym procesom. Przyjrzyjmy się temu, co się dzieje.
Zabijanie procesu
Aby zabić proces, potrzebujesz nazwy procesu lub identyfikatora procesu. To jest zadanie dla polecenia ps
.
Aby odświeżyć Twoją pamięć, polecenie
ps -ef
wyświetla listę wszystkich uruchomionych procesów i wiele informacji o każdym z nich. Użyj następującego polecenia, aby wyświetlić listę wszystkich uruchomionych procesów i przefiltrować wyniki do wierszy zawierających ciąg „python”:ps -ef | grep python
Wyniki powinny wyglądać mniej więcej tak:
yourname+ 342 254 99 23:34 pts/1 00:00:31 python3 bad.py yourname+ 344 254 0 23:35 pts/1 00:00:00 grep --color=auto python
Z listy wynika, że proces bad.py zużywa 99 procent czasu procesora CPU serwera. Program zasługuje na swoją nazwę.
Polecenie
kill
zabija uruchomiony proces na podstawie identyfikatora procesu. (Powiązane polecenie o nazwiekillall
zabija proces na podstawie nazwy procesu). Podczas wywoływaniakill
metody musisz zdecydować, jakiego rodzaju "sygnał" użyć do zabicia procesu. Użyj następującego polecenia, aby wyświetlić listę typów sygnałów:kill -l
Jeśli zabijasz proces demona — działający w tle i zapewniający ważne usługi dla systemu operacyjnego — możesz chcieć go zabić i natychmiast uruchomić ponownie. Aby to zrobić, możesz użyć sygnału
SIGHUP
.W tym przykładzie chcesz zabić proces bez jego ponownego uruchamiania. W związku z tym chcesz użyć sygnału
SIGKILL
, który odpowiada numerowi 9. W tym celu pobierz identyfikator procesu bad.py z danych wyjściowych poleceniaps -ef
(znajduje się on w drugiej kolumnie) i użyj następującego polecenia, aby zakończyć proces. Zastąp elementPROCESS_ID
identyfikatorem procesu.kill -9 PROCESS_ID
To samo polecenie można również wprowadzić jako
kill -s SIGKILL PROCESS_ID
. To, czy użyjesz nazwy, czy numeru sygnału, zależy od ciebie.Zakończ, uruchamiając ponownie polecenie
ps
, aby upewnić się, że proces bad.py już nie działa.
Innym typowym zastosowaniem poleceń ps
i kill
jest identyfikowanie i kończenie „procesów zombie”, które są procesami podrzędnymi pozostawionymi przez źle napisane programy.