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


Risposte:


128

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

$ 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 grep(è possibile ignorare in sicurezza l'ultimo, che rappresenta grepse stesso.

Per interrompere il processo offensivo, eseguire: kill piddove pid è l'ID processo del programma. Potresti dover usare il tuo giudizio su quale delle partite debba essere killeditato, oppure potresti usare topinvece. L'uso killda solo invia SIGTERM, che dovresti provare prima in quanto consente al programma di ripulire correttamente dopo se stesso. Se SIGTERM fallisce, prova SIGHUP, che è la medicina stonger: kill -HUP pid. Se tutto il resto fallisce, invia SIGKILL. Ma dovresti farlo solo come ultima risorsa, perché SIGKILL fa sì che il kernel termini immediatamente il processo senza possibilità di pulizia. A volte ciò può comportare la corruzione dei dati o altri problemi. Quindi di nuovo, invia SIGKILL solo come ultima risorsa. Per fare ciò, fai kill -KILL pido kill -9 pid.

Se stai eseguendo un'interfaccia grafica, ovviamente, non devi ingannare con questa folle 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 arrestare (Hm, potrebbe essere quello che utilizza la CPU al 90%?) E fare clic con il tasto destro del mouse. Poiché il processo è già interrotto, (questo è il problema, giusto?) Scegli Termina processo o Termina processo dal menu risultante.

Ringraziamo koanhead


5
Le persone non dovrebbero mai usare SIGKILL (kill -9) a meno che tutti gli altri metodi non abbiano fallito. L'unica lista kill -9è un cattivo consiglio. Ho modificato la risposta per correggerla.
Scott Severance,

Come posso trovare il pid di una funzione personalizzata. Ho una funzione che contiene un ciclo con un pingcomando e sleep. Secondo unix.stackexchange.com/a/275826/72988 , non è possibile in Ubuntu senza multiplexer.
Timo,

49

Non penso che ci sia bisogno di comandi così lunghi quando è possibile 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 a stdout. Tutti i criteri devono corrispondere. Per esempio,

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

    $ pgrep -u root sshd
    
  • Elencare i processi di proprietà del daemon OR radice.

    $ pgrep -u root,daemon
    

pidof:

DESCRIZIONE :

Pidof trova l'ID di processo (pid) dei programmi indicati. Stampa gli ID sull'output standard.

sintassi: pidof nome_programma

  • Per uccidere un programma con pid usa l'esempio pkill:

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

    -fflag: cerca il nome_processo (vedi man pkill)
    -oflag: seleziona solo il più vecchio dei processi corrispondenti.
    -nflag: seleziona solo il più recente dei processi di abbinamento.
    -lflag: elenca il nome del processo e l'ID del processo.


1
Questa è la risposta migliore
BlackDivine,

21

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

pidof <application name>

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

pidof vim

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

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

Fare riferimento alla pidofpagina del manuale per maggiori informazioni.


Questo non è installato per impostazione predefinita. Potrebbe essere nel pacchetto sysvinit-utils.
flickerfly,

Ho preso MariaDB. pidof mysqldrestituisce un PID. Tuttavia, se digito pidof Mariadbnon viene restituito nulla. È lo stesso PID sia per MariaDB che per MySQL?
Pathros,

18

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

ps aux | grep -i firefox

Se desideri interrompere tutti i processi che puoi utilizzare:

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

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


5
Questo uccide anche il ps aux | grep -i firefox...processo, perché contiene il testo firefoxal suo comando!
Eric,

1
@Eric potresti usare grep -i firefo[x]per abbinare solo firefox
AD

@ John-rumorista non consigliano di usare -9con kill, vedi qui per le spiegazioni
AD

3

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

pgrep -f desired_program_name

1

Per quelli che eseguono Ubuntu 16.04 LTS, è necessario utilizzare ps axe non solops dalla riga di comando, altrimenti si otterranno solo i processi che si generano dalla particolare istanza del terminale in cui ci si trova (di solito basta 'bash' [la shell in cui ci si trova ] e 'ps' [quello che hai appena eseguito])


Mi piace ps -e(mostra tutto) e ps -ejH(mostra un albero di processo).
Andrew

1
@Andrew bello, in realtà è piuttosto dolce - grazie per la punta
cygnus_x1

0

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


0

Potresti fare:

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

prima due pipe ottengono informazioni sul processo, poi proviamo a ottenere la colonna PID usando il taglio della vecchia scuola e poi diamo il PID risultante per uccidere.


kill -9è la pistola più grande che devi uccidere un processo. All'inizio dovresti provare un segnale più gentile prima di ricorrere a SIGKILL per dare al processo la possibilità di ripulire le sue risorse.
Byte Commander

È vero @ByteCommander. Volevo farne una fodera che riuscisse a fare il lavoro.
Arian Soltani,

0
top

o

screen -list|ls

elenca tutti i pid con il processo corrispondente

kill -[pid]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.