Il pgrep
e pkill
le utilità sono state introdotte in Solaris 7 di Sun e, come notato da g33klord, accettano uno schema come argomento che viene confrontato con i nomi dei processi in esecuzione. Mentre pgrep
stampa semplicemente un elenco di processi corrispondenti, pkill
invierà il segnale specificato (o SIGTERM
per impostazione predefinita) ai processi. Le opzioni e la semantica comuni tra pgrep
e pkill
è utile quando vuoi stare attento e rivedere prima l'elenco dei processi di corrispondenza con pgrep
, quindi procedi a ucciderli con pkill
. pgrep
e pkill
sono forniti dal pacchetto procps, che fornisce anche altri /proc
utilità del file system, come ps
, top
, free
, uptime
tra gli altri.
Il killall
Il comando è fornito dal pacchetto psmisc e differisce da pkill
in quanto, per impostazione predefinita, corrisponde esattamente al nome dell'argomento (fino ai primi 15 caratteri) quando si determinano i processi a cui verranno inviati i segnali. Il -e
, --exact
L'opzione può essere specificata per richiedere anche corrispondenze esatte per nomi più lunghi di 15 caratteri. Questo rende killall
un po' più sicuro da usare rispetto a pkill
. Se l'argomento specificato contiene una barra (/
), l'argomento viene interpretato come un nome di file e i processi che eseguono quel particolare file verranno selezionati come destinatari del segnale. killall
supporta anche la corrispondenza delle espressioni regolari dei nomi dei processi, tramite -r
, --regexp
opzione.
Ci sono anche altre differenze. Il killall
Il comando, ad esempio, ha opzioni per abbinare i processi in base all'età (-o
, --older-than
e -y
, --younger-than
), mentre pkill
può essere detto di terminare solo i processi su un terminale specifico (tramite il -t
opzione). Chiaramente quindi, i due comandi hanno nicchie specifiche.
Nota che il killall
comando sui sistemi discendenti da Unix System V (in particolare Solaris di Sun, AIX di IBM e HP-UX di HP) uccide tutti processi che possono essere interrotti da un particolare utente, spegnendo efficacemente il sistema se eseguito da root.
Le utilità Linux psmisc sono state portate su BSD (e in estensione Mac OS X), quindi killall
segue la semantica "uccidi i processi per nome".
pkill
è quello che vale la pena insegnare alle generazioni future, sia per i filtri che hai menzionato sia per il fatto che è abbinato al pgrep
altamente riutilizzabile . Uccidono i processi allo stesso modo, e nessuno dei due uccide in modo ricorsivo, anche se con pgrep
, puoi selezionare per sessione (per-tty, think setsid) o gruppo di processi (think job control).
una differenza è che killall
prendi il nome esatto del processo come argomento mentre pkill
può assumere un nome parziale o completo.
Puoi fare riferimento a questa domanda per saperne di più su pkill