Qualche volta, uccidere una procedura è l'unico modo per sbarazzarsene. Nonostante il nome severo, “uccidere” un procedimiento simplemente significa “obligarlo a abandonar”. Prossimo, Ti mostriamo come farlo dalla riga di comando di Linux o macOS.
Che cos'è una procedura?
Esecuzione di programmi come il tuo browser web, i processi in background associati al tuo ambiente desktop e ai servizi di sistema Linux sono tutti processi.
Puoi raggruppare i processi in due gruppi:
- Processi in primo piano sono quelli che sono stati avviati o avviati da un utente. Possono essere in una finestra di terminale o possono essere un'applicazione grafica.
- Processi in background sono tutti processi che si avviano automaticamente e non hanno alcuna interazione con gli utenti. Non si aspettano l'input dell'utente o presentano risultati o risultati a loro. I processi in background sono cose come servizi e demoni.
Se i processi in primo piano sono la parte anteriore dello staff teatrale e degli attori, los procesos de fondo son el equipo detrás del escenario “dietro le quinte”.
Quando i processi si comportano male o non funzionano, può richiedere troppo tempo per la CPU, consumare la RAM o entrare in un ciclo computazionale stretto e smettere di rispondere. Le applicazioni grafiche possono rifiutarsi di rispondere ai clic del mouse. Le app del terminale potrebbero non restituirlo mai al prompt dei comandi.
La soluzione umana
“Matar” un procedimiento simplemente significa “forzar el cierre del procedimiento”. Ciò può essere necessario se la procedura si rifiuta di rispondere.
Linux fornisce kill
, pkill
, e killall
comandi per permetterti di fare esattamente questo. Questi comandi possono essere utilizzati con qualsiasi tipo di procedura, grafico o riga di comando, in primo piano o in secondo piano.
Il comando kill
Utilizzo kill
, devi conoscere l'id della procedura (PID) della procedura che vuoi concludere. il ps
Il comando può essere utilizzato per trovare il PID di una procedura.
Avere ps
cerca in tutti i processi usa il -e
(tutti i processi) opzione. Canalizzare l'uscita attraverso less
è consigliabile, ce ne sarà abbastanza. scrive ps
, Uno spazio, -e
, Uno spazio, |
(un carattere pipa), un altro spazio e poi scrivi less
. Premi Invio per eseguire il comando.
ps -e | meno
Questo ti darà un elenco di processi equivalenti allo screenshot successivo. Puoi cercare in avanti su less
usando il /
e puoi tornare indietro con il ?
chiave inglese.
Per concentrarti sulla procedura che ti interessa, convogliare l'uscita di ps
attraverso grep
e specifica il nome, o parte del nome, della procedura.
ps -e | grep otturatore
Una volta individuato il PID della procedura che vuoi terminare, passalo a kill
comando come parametro. Per finire il shutter
procedura identificata dal comando di cui sopra, usa questo comando:
uccisione 2099
il kill
Il commando è un killer silenzioso; non ti dà alcun feedback se ha avuto successo.
Il comando pkill
il pkill
Il comando consente di terminare una procedura (i processi) con il suo nome. Non è necessario identificare la procedura da PID. Utilizzo pkill
fornisci una definizione di ricerca che pkill
usato per confrontare con l'elenco dei processi in esecuzione. I processi di abbinamento terminano. Perché, devi essere sicuro di aver digitato correttamente quel termine di ricerca.
Come rete di sicurezza, Puoi usare pgrep
comando prima tu usi il pkill
comando. il pgrep
Il comando accetta anche una definizione di ricerca. Elencherà il PID di ogni procedura che corrisponde al termine di ricerca. Questo è sicuro perché pgrep
non emetterà alcun segnale di interruzione ai processi, e se sbagli a scrivere il termine di ricerca, non cancellerà un'altra procedura per errore. Puoi assicurarti di aver pensato correttamente il termine di ricerca prima di passare a pkill
. Entrambi pkill
e pgrep
trattare il termine di ricerca allo stesso modo. Il suo trattamento è così equivalente che condividi la stessa pagina man.
Supongamos que hay un procedimiento con “subq” per tuo conto. Useremo il ps -u dave | grep
comando di sbirciare dietro la tenda. Posso vederlo “subq” coincidirá con ese procedimiento y solo con ese procedimiento. Era solo così puoi vedere il nome completo della procedura.
ps -u dave | grep subq
Supponiamo che il nostro utente non ha Fatto; todo lo que conocen es que el nombre del procedimiento contiene la subcadena “subq”. Usano pgrep
per verificare che ci sia una sola corrispondenza con il termine di ricerca. Quindi usano quel termine di ricerca con pkill
.
pgrep subq
pkill subq
Puoi usare pkill
per uccidere più processi contemporaneamente. Qui l'utente corre pgrep
per controllare quanti processi ha avviato Chrome. Usano pkill
per ucciderli tutti. Più tardi verificano con pgrep
che tutti sono stati eliminati.
pgrep chrome
pkill chrome
pgrep chrome
Se sono in esecuzione più processi con lo stesso nome, ma non vuoi eliminarli tutti, Puoi usare pgrep
con il -f
(riga di comando) possibilità di identificare quale procedura è quale. Un semplice esempio sarebbe due ping
Processi. Hai intenzione di ucciderne uno ma non l'altro. Puoi usare le tue righe di comando per distinguerle. Nota l'uso delle virgolette per avvolgere il parametro della riga di comando.
pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"
Il comando Killall
Avvertimento: Sui sistemi operativi Solaris e OpenIndiana, il killall
il comando sarà uccidi tutti i processi che ti appartengono. Se sei root o se hai rilasciato sudo killall
riavvierà il computer! Durante la ricerca per questo post, questo comportamento è stato confermato con l'ultima versione di OpenIndiana Hipster 2018.10.
il killall
comando funziona allo stesso modo al pkill
comando ma con una differenza specifica. Invece di passare una definizione di ricerca al comando, è necessario fornire il nome esatto della procedura.
Non è possibile fornire una corrispondenza parziale al nome di una procedura; è necessario fornire il nome completo della procedura, come mostrato:
chiudi tutto
otturatore omicida
il -y
(più piccolo di) consente di terminare i processi in esecuzione da meno di un periodo specificato. Il periodo è indicato in numeri seguiti da una di queste unità:
- S (secondi)
- m (minuti)
- h (ore)
- D (giorni)
- w (settimane)
- m (mesi, Nota, “m” lettera maiuscola)
- e (anni)
Per uccidere una procedura chiamata ana
che è stato appena lanciato e lascia eventuali istanze precedenti di ana
in azione, è possibile utilizzare i seguenti parametri con killall
, se avessi reagito in due minuti:
killall -y 2m ana
il -o
L'opzione (prima di) consente di terminare i processi in esecuzione da più di un periodo specificato. Questo comando ucciderà tutti ssh
connessioni in corso da più di un giorno:
killall -o 1d sshd
Non essere troppo felice
Questi comandi ti permetteranno di identificare e terminare processi errati in modo accurato e sicuro in modo corretto.
Sii sempre cauto. Primo, assicurati che la procedura che stai per completare sia veramente quella che desideri. Al secondo posto, doppio controllo: fai attenzione e assicurati che la procedura di destinazione sia quella che vuoi terminare. Procedi al completamento della procedura una volta che sei soddisfatto.