Come trovare l'ID di processo (PID) di un programma terminale in esecuzione?

88

Sto eseguendo un programma nel terminale che non riesco a sfuggire con Ctrl - C e che voglio uccidere. Come posso trovare il suo PID?

    
posta Jjed 25.08.2012 - 17:00

8 risposte

104

Apri un altro terminale ed esegui ps ax | grep foo dove foo è il nome del programma che non risponde. Questo dovrebbe restituire una linea di output simile a questa:

$ 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

Il primo campo di ogni riga di output è un numero che rappresenta l'ID di processo del programma corrispondente a grep (puoi tranquillamente ignorare l'ultimo, che rappresenta grep stesso.

Per fermare il processo incriminato, fai: kill pid dove pid è l'ID di processo del programma. Potrebbe essere necessario utilizzare il tuo giudizio su quale delle corrispondenze deve essere kill ed, oppure puoi utilizzare top . L'utilizzo di kill di per se stesso invia SIGTERM, che dovresti provare prima in quanto consente al programma di ripulire correttamente se stesso. Se SIGTERM fallisce, prova SIGHUP, che è un medicinale più potente: kill -HUP pid . Se tutto il resto fallisce, invia SIGKILL. Ma, dovresti farlo solo come ultima risorsa, perché SIGKILL fa sì che il kernel interrompa immediatamente il processo senza possibilità di pulizia. Ciò può a volte causare la corruzione dei dati o altri problemi. Quindi, di nuovo, invia SIGKILL solo come ultima risorsa. Per fare ciò, fai kill -KILL pid o kill -9 pid .

Se stai utilizzando un'interfaccia grafica, ovviamente, non devi ingannare con questa roba da riga di comando per portare a termine il lavoro. Basta aprire "Monitor di sistema", accedere alla scheda Processi, scegliere il processo che si desidera interrompere (Hm, potrebbe essere quello che utilizza il 90% della CPU?) E fare clic con il tasto destro del mouse. Poiché il processo è già stato interrotto, (questo è il problema, giusto?) Scegli Termina processo o Elimina processo dal menu risultante.

  

Credito a koanhead

    
risposta data Jjed 13.04.2017 - 14:24
34

Non penso che ci sia bisogno di comandi così lunghi quando puoi eseguire gli stessi comandi con pgrep, pkill, pidof ecc ...

  • Per ottenere il pid di un programma in esecuzione

pgrep:

   pgrep [options] pattern

DESCRIZIONE:     pgrep esamina i processi attualmente in esecuzione ed elenca gli ID di processo che corrispondono ai criteri di selezione allo stdout. Tutti i criteri devono coincidere. Ad esempio,

  • Per trovare il processo chiamato sshd di proprietà di root.

    $ pgrep -u root sshd
    
  • Elenca i processi di proprietà di root OR daemon.

    $ pgrep -u root,daemon
    

pidof:

DESCRIZIONE :

Pidof trova l'id (pids) del processo dei programmi nominati. Stampa quegli id ​​sullo standard output.

sintassi:        pidof nome_programma

  • Per uccidere un programma da pid usa pkill esempio:

    pkill pid    
    pkill -f process_name    
    pkill -o process_name    
    pkill -n process_name    
    pkill -l process_name
    

    -f flag: ricerca il nome_processo (vedi man pkill)
    -o flag: seleziona solo il più vecchio dei processi di corrispondenza.
    -n flag: seleziona solo il più recente dei processi corrispondenti.
    -l flag: elenca il nome del processo e l'ID del processo.

risposta data Prabhat Kumar Singh 16.06.2014 - 11:07
16

Il modo più semplice per conoscere il pid di un programma in esecuzione è:

pidof <application name>

Ad esempio, se hai avviato vim e vuoi conoscere il suo pid:

pidof vim

Ricorda che dovrai fornire il nome esatto del programma che è stato avviato.

Ad esempio, se stai eseguendo vi ed esegui pidof vim non otterrai risultati corretti.

Fai riferimento alla pagina di manuale di pidof per maggiori informazioni.

    
risposta data jobin 16.06.2014 - 11:28
13

Ho trovato che è bello usare una ricerca senza distinzione tra maiuscole e minuscole aggiungendo il "-i" e usando "aux" invece di "ax" per ottenere un output più descrittivo:

ps aux | grep -i firefox

Se desideri eliminare tutti i processi che puoi utilizzare:

ps aux | grep -i firefox | awk {'print '} | xargs kill -9

Questa è un'uccisione forzata. Rilascia il "-9" se vuoi un soft kill.

    
risposta data John Foley 24.12.2013 - 17:45
3

Se vuoi solo il pid (utile per gli script di autokill, ecc ...)

pgrep -f desired_program_name
    
risposta data MikeL 10.01.2017 - 14:29
0

Puoi anche aprire un altro terminale (o passare a un altro tty) ed eseguire top , che è fondamentalmente una versione di testo di System Monitor. La prima colonna elenca il PID di ogni processo in esecuzione, che puoi eliminare premendo K , inserendo il PID e quindi immettendo un segnale numerico da inviare.

    
risposta data Waldir Leoncio 16.06.2014 - 13:01
0

Potresti fare:

ps ax | grep firefox | cut -f2 -d" " - | xargs kill -9

le prime due pipe ricevono informazioni sul processo, poi proviamo a ottenere la colonna PID usando il taglio old-school e poi diamo il PID risultante da eliminare.

    
risposta data Arian Soltani 27.09.2016 - 23:09
0

Per quelli che usano Ubuntu 16.04 LTS, tu devi usare ps ax e non solo ps alla riga di comando, altrimenti otterrai solo i processi che generano la particolare istanza terminale in cui ti trovi. (di solito solo "bash" [la shell in cui ti trovi] e "ps" [cosa hai appena eseguito])

    
risposta data cygnus_x1 10.09.2017 - 16:30

Leggi altre domande sui tag