Qual è la differenza tra pkill e killall?


Risposte:


46

Le utility pgrepe pkillsono state introdotte in Sun Solaris 7 e, come notato da g33klord , prendono uno schema come argomento che viene confrontato con i nomi dei processi in esecuzione. Mentre pgrepstampa semplicemente un elenco di processi corrispondenti, pkillinvierà il segnale specificato (o SIGTERMper impostazione predefinita) ai processi. Le opzioni e la semantica comuni tra pgrepe pkillsono utili quando vuoi stare attento e prima rivedere l'elenco con i processi di corrispondenza pgrep, quindi procedere con la loro eliminazione pkill. pgrepe pkillsono forniti dal le procps pacchetto, che fornisce anche altre /procutilità del file system, quali ps, top, free, uptimetra gli altri.

Il killallcomando è fornito dal pacchetto psmisc e differisce da pkillquello, per impostazione predefinita, corrisponde esattamente al nome dell'argomento (fino ai primi 15 caratteri) quando si determinano i segnali a cui verranno inviati i segnali di processo. L' opzione -e, --exactpuò essere specificata per richiedere anche corrispondenze esatte per nomi più lunghi di 15 caratteri. Questo rende killallun po 'più sicuro da usare rispetto a pkill. Se l'argomento specificato contiene caratteri slash ( /), l'argomento viene interpretato come un nome file e i processi che eseguono quel determinato file verranno selezionati come destinatari del segnale. killallsupporta anche espressione regolare corrispondenza dei nomi di processo, attraverso il -r, --regexpopzione.

Ci sono anche altre differenze. Il killallcomando, ad esempio, ha opzioni per abbinare i processi per età ( -o, --older-thane -y, --younger-than), mentre pkillpuò essere detto di uccidere i processi solo su un terminale specifico (tramite l' -topzione). Chiaramente quindi, i due comandi hanno nicchie specifiche.

Si noti che il killallcomando su sistemi che discendono da Unix System V (in particolare Sun's Solaris , IBM AIX e HP-UX HP ) uccide tutti i processi avviabili da un determinato utente, arrestando efficacemente il sistema se eseguito da root.

Le utility psmisc di Linux sono state portate su BSD (e in estensione Mac OS X ), quindi killallsegue la semantica "uccidi i processi per nome".


La differenza principale che ho riscontrato è l'arresto dei comandi di un pattern da parte di un utente killall -u <username> -r <process>o pkill <process> -U <uid>che mi rende killallmolto più facile da usare.
jeremysprofile,

13

pkillè quello che vale la pena insegnare alle generazioni future, sia per i filtri che menzioni sia per il fatto che è abbinato a quelli altamente riutilizzabili pgrep. Uccidono i processi allo stesso modo e nessuno dei due uccide in modo ricorsivo, anche se con pgrep, è possibile selezionare per sessione (pertty, think setsid) o gruppo di processi (think job control).


8

una differenza è che killallprende esattamente il nome del processo come argomento, mentre pkillpuò assumere un nome parziale o completo.

Puoi fare riferimento a questa domanda per conoscere a fondo pkill


1

killall- uccide i processi per nome. Utilizzare il killallcomando per inviare un segnale a uno o più processi che soddisfano i criteri di selezione, come il nome del comando, i processi di proprietà di un utente specifico o tutti i processi a livello di sistema.

pkill- invierà il segnale specificato (di default SIGTERM) a ciascun processo invece di elencarli su stdout. pkillpuò segnalare processi multipli come killall, ma può anche utilizzare criteri di selezione avanzati che possono includere qualsiasi combinazione di:

Comando UID Parent Terminal

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.