Sto eseguendo un programma nel terminale con il quale non posso scappare Ctrl- Ce che voglio uccidere. Come posso trovare il suo PID?
Sto eseguendo un programma nel terminale con il quale non posso scappare Ctrl- Ce che voglio uccidere. Come posso trovare il suo PID?
Risposte:
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 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 grep
se stesso.
Per interrompere il processo offensivo, eseguire:
kill pid
dove pid è l'ID processo del programma. Potresti dover usare il tuo giudizio su quale delle partite debba essere kill
editato, oppure potresti usare top
invece. L'uso kill
da 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 pid
o 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
kill -9
è un cattivo consiglio. Ho modificato la risposta per correggerla.
ping
comando e sleep
. Secondo unix.stackexchange.com/a/275826/72988 , non è possibile in Ubuntu senza multiplexer
.
Non penso che ci sia bisogno di comandi così lunghi quando è possibile eseguire gli stessi comandi con pgrep, pkill, pidof ecc ...
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
-f
flag: cerca il nome_processo (vedi man pkill)
-o
flag: seleziona solo il più vecchio dei processi corrispondenti.
-n
flag: seleziona solo il più recente dei processi di abbinamento.
-l
flag: elenca il nome del processo e l'ID del processo.
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 vim
non otterrai risultati corretti.
Fare riferimento alla pidof
pagina del manuale per maggiori informazioni.
pidof mysqld
restituisce un PID. Tuttavia, se digito pidof Mariadb
non viene restituito nulla. È lo stesso PID sia per MariaDB che per MySQL?
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.
ps aux | grep -i firefox...
processo, perché contiene il testo firefox
al suo comando!
grep -i firefo[x]
per abbinare solo firefox
Per quelli che eseguono Ubuntu 16.04 LTS, è necessario utilizzare ps ax
e 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])
ps -e
(mostra tutto) e ps -ejH
(mostra un albero di processo).
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.
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.