W terminalu uruchamiam program, z którym nie mogę uciec Ctrl- Ci którego chcę zabić. Jak mogę znaleźć jego PID?
W terminalu uruchamiam program, z którym nie mogę uciec Ctrl- Ci którego chcę zabić. Jak mogę znaleźć jego PID?
Odpowiedzi:
Otwórz inny terminal i uruchom, ps ax | grep foo
gdzie foo to nazwa niereagującego programu. Powinno to zwrócić wiersz wyniku, który wygląda mniej więcej tak:
$ ps ax | grep firefox
2222 ? S 0:00 /bin/sh /usr/lib/firefox-3.6.9/firefox
2231 ? Sl 514:36 /usr/lib/firefox-3.6.9/firefox-bin
30290 pts/2 S+ 0:00 grep --color=auto firefox
Pierwsze pole każdego wiersza wyniku to liczba reprezentująca identyfikator procesu dopasowanego programu grep
(możesz bezpiecznie zignorować ostatni, który reprezentuje grep
siebie.
Aby zatrzymać proces naruszający, wykonaj:
kill pid
gdzie pid jest identyfikatorem procesu programu. Być może będziesz musiał użyć oceny, które z dopasowań należy kill
edytować, lub możesz użyć top
zamiast tego. kill
Samo użycie wysyła SIGTERM, który powinieneś najpierw wypróbować, ponieważ pozwala programowi odpowiednio wyczyścić po sobie. Jeśli SIGTERM nie powiedzie się, spróbuj SIGHUP, który jest stonger medycyny: kill -HUP pid
. Jeśli wszystko inne zawiedzie, wyślij SIGKILL. Ale powinieneś to zrobić tylko w ostateczności, ponieważ SIGKILL powoduje, że jądro natychmiast kończy proces bez możliwości czyszczenia. Może to czasami powodować uszkodzenie danych lub inne problemy. Ponownie wyślij SIGKILL tylko w ostateczności. Aby to zrobić, zrób kill -KILL pid
lub kill -9 pid
.
Jeśli korzystasz z interfejsu graficznego, oczywiście nie musisz oszukiwać za pomocą tych szalonych poleceń z wiersza poleceń, aby wykonać zadanie. Po prostu otwórz „Monitor systemu”, przejdź do zakładki Procesy, wybierz proces, który chcesz zatrzymać (Hm, czy może to być procesor wykorzystujący 90% CPU?) I kliknij go prawym przyciskiem myszy. Ponieważ proces jest już zatrzymany (to jest problem, prawda?) Wybierz Zakończ proces lub Zabij proces z wyświetlonego menu.
Kredyt dla koanhead
kill -9
jest złą radą. Zredagowałem odpowiedź, aby ją poprawić.
ping
poleceniem i sleep
. Według unix.stackexchange.com/a/275826/72988 nie jest to możliwe bez Ubuntu multiplexer
.
Nie sądzę, aby były potrzebne takie długie polecenia, kiedy można wykonać te same polecenia za pomocą pgrep, pkill, pidof itp ...
pgrep:
pgrep [options] pattern
OPIS: pgrep przegląda obecnie uruchomione procesy i wyświetla identyfikatory procesów, które pasują do kryteriów wyboru na standardowe wyjście. Wszystkie kryteria muszą być zgodne. Na przykład,
Aby znaleźć proces o nazwie sshd należący do roota.
$ pgrep -u root sshd
Wymień procesy należące do demona root OR.
$ pgrep -u root,daemon
pidof:
OPIS :
Pidof znajduje identyfikator procesu (pID) wymienionych programów. Drukuje te identyfikatory na standardowym wyjściu.
składnia: pidof nazwa_programu
Aby zabić program za pomocą pid, użyj przykładu pkill:
pkill pid
pkill -f process_name
pkill -o process_name
pkill -n process_name
pkill -l process_name
-f
flag: Przeszukuje nazwę procesu (patrz man pkill)
-o
flaga: Wybierz tylko najstarszy z pasujących procesów.
-n
flag: Wybierz tylko najnowszy z pasujących procesów.
-l
flag: Podaj nazwę procesu oraz identyfikator procesu.
Najłatwiejszym sposobem poznania pid działającego programu jest użycie:
pidof <application name>
Na przykład, jeśli uruchomiłeś vima i chcesz poznać jego pid:
pidof vim
Pamiętaj, że musisz podać dokładną nazwę programu, który został uruchomiony.
Na przykład, jeśli uruchomisz vi i pidof vim
wykonasz, nie uzyskasz poprawnych wyników.
Więcej informacji można znaleźć na pidof
stronie podręcznika użytkownika.
pidof mysqld
zwraca PID. Jednak po wpisaniu pidof Mariadb
nic nie jest zwracane. Czy to ten sam PID dla MariaDB i MySQL?
Odkryłem, że miło jest używać wyszukiwania bez rozróżniania wielkości liter, dodając „-i” i używając „aux” zamiast „ax”, aby uzyskać bardziej opisowy wynik:
ps aux | grep -i firefox
Jeśli chcesz zabić wszystkie procesy, których możesz użyć:
ps aux | grep -i firefox | awk {'print $2'} | xargs kill -9
To potężne zabójstwo. Upuść „-9”, jeśli chcesz miękkie zabicie.
ps aux | grep -i firefox...
proces, ponieważ zawiera on tekst firefox
w swoim poleceniu!
grep -i firefo[x]
aby dopasować tylko firefox
Dla tych z Ubuntu 16.04 LTS, ty musi używać ps ax
, a nie tylkops
w wierszu polecenia, w przeciwnym razie po prostu procesy tarła z konkretnym przypadku terminali, że jesteś w. (Zwykle po prostu „bash” [skorupę jesteś w ] i „ps” [co właśnie uruchomiłeś])
ps -e
(pokazuje wszystko) i ps -ejH
(pokazuje drzewo procesów).
Możesz także otworzyć inny terminal (lub przełączyć na inny tty) i uruchomić top
, który jest w zasadzie tekstową wersją Monitora systemu. Pierwsza kolumna zawiera PID każdego uruchomionego procesu, który można zabić, naciskając K, wprowadzając PID, a następnie wprowadzając sygnał numeryczny do wysłania.
Mógłbyś:
ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9
najpierw dwie rury pobierają informacje o procesie, następnie staramy się uzyskać kolumnę PID za pomocą oldschoolowego cięcia, a następnie dajemy wynikowy PID do zabicia.
kill -9
to największa broń, którą musisz zabić. Najpierw powinieneś spróbować łagodniejszego sygnału, zanim skorzystasz z SIGKILL, aby dać temu procesowi szansę na oczyszczenie jego zasobów.