Jak znaleźć identyfikator procesu (PID) uruchomionego programu terminalowego?

116

W terminalu uruchamiam program, z którym nie mogę uciec Ctrl- Ci którego chcę zabić. Jak mogę znaleźć jego PID?

Jjed
źródło
1
To jest gałąź Co powinienem zrobić, gdy Ubuntu zawiesza się? jako odniesienie, aby szczegóły w tym pytaniu nie stały się zbyt techniczne.
Jjed
Istnieje polecenie pidof .
neverMind9,

Odpowiedzi:

127

Otwórz inny terminal i uruchom, ps ax | grep foogdzie 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 grepsiebie.

Aby zatrzymać proces naruszający, wykonaj: kill pidgdzie pid jest identyfikatorem procesu programu. Być może będziesz musiał użyć oceny, które z dopasowań należy killedytować, lub możesz użyć topzamiast tego. killSamo 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 pidlub 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

Jjed
źródło
5
Ludzie nigdy nie powinni używać SIGKILL (zabij -9), chyba że wszystkie inne metody zawiodły. Tylko lista kill -9jest złą radą. Zredagowałem odpowiedź, aby ją poprawić.
Scott Severance
Jak znaleźć pid funkcji niestandardowej. Mam funkcję, która zawiera pętlę z pingpoleceniem i sleep. Według unix.stackexchange.com/a/275826/72988 nie jest to możliwe bez Ubuntu multiplexer.
Timo,
47

Nie sądzę, aby były potrzebne takie długie polecenia, kiedy można wykonać te same polecenia za pomocą pgrep, pkill, pidof itp ...

  • Aby uzyskać pid programu biegającego

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
    

    -fflag: Przeszukuje nazwę procesu (patrz man pkill)
    -oflaga: Wybierz tylko najstarszy z pasujących procesów.
    -nflag: Wybierz tylko najnowszy z pasujących procesów.
    -lflag: Podaj nazwę procesu oraz identyfikator procesu.

Prabhat Kumar Singh
źródło
1
To najlepsza odpowiedź
BlackDivine,
20

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 vimwykonasz, nie uzyskasz poprawnych wyników.

Więcej informacji można znaleźć na pidofstronie podręcznika użytkownika.

Praca w
źródło
To nie jest instalowane domyślnie. Może być w pakiecie sysvinit-utils.
flickerfly
Mam MariaDB. pidof mysqldzwraca PID. Jednak po wpisaniu pidof Mariadbnic nie jest zwracane. Czy to ten sam PID dla MariaDB i MySQL?
Pathros,
18

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.

John Foley
źródło
5
To także zabija ps aux | grep -i firefox...proces, ponieważ zawiera on tekst firefoxw swoim poleceniu!
Eric
1
@ Eric, którego możesz użyć, grep -i firefo[x]aby dopasować tylko firefox
AD
@ John Foley nie radzą, aby korzystać -9z killpatrz tutaj dla wyjaśnienia
AD
3

Jeśli chcesz tylko pid (przydatne w skryptach autokill itp.)

pgrep -f desired_program_name
MikeL
źródło
1

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ś])

cygnus_x1
źródło
Lubię ps -e(pokazuje wszystko) i ps -ejH(pokazuje drzewo procesów).
Andrew
1
@Andrew miły, to naprawdę całkiem słodkie - dzięki za wskazówkę
cygnus_x1
0

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.

Waldir Leoncio
źródło
0

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.

Arian Soltani
źródło
kill -9to 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.
Bajt Dowódca
To prawda @ByteCommander. Chciałem, aby był to jeden liniowiec, który wykona zadanie.
Arian Soltani
0
top

lub

screen -list|ls

wypisz wszystkie pid z odpowiednim procesem

kill -[pid]
Rakly3
źródło