Conosco kill
command , e la maggior parte delle volte usiamo semplicemente kill -9
per terminare un processo con forza, ci sono molti altri segnali che possono essere usati con kill
. Ma mi chiedo quali sono i casi d'uso di pkill
e killall
, se esiste già un comando kill.
Esegui pkill
e killall
usa il kill
comando nella loro attuazione? Voglio dire, sono solo wrapper su kill
o hanno una propria implementazione?
Vorrei anche sapere come pgrep
comando ottiene l'id del processo dal nome del processo.
Tutti questi comandi utilizzano le stesse chiamate di sistema sottostanti? C'è qualche differenza dal punto di vista delle prestazioni, quale è più veloce?
Risposta accettata:
L'kill
command è un wrapper molto semplice per kill
chiamata di sistema , che conosce solo gli ID di processo (PID). pkill
e killall
sono anche wrapper per kill
chiamata di sistema , (in realtà, alla libreria libc che richiama direttamente la chiamata di sistema), ma può determinare i PID per te, in base a cose come il nome del processo, il proprietario del processo, l'id di sessione, ecc.
Come pkill
e killall
il lavoro può essere visto usando ltrace
o strace
su di essi. Su Linux, entrambi leggono /proc
filesystem, e per ogni pid (directory) trovato, attraversa il percorso in modo da identificare un processo tramite il suo nome o altri attributi. Il modo in cui ciò viene fatto è tecnicamente parlando, specifico del kernel e del sistema. In generale, leggono da /proc/<PID>/stat
che contiene il nome del comando come 2° campo. Per pkill -f
e pgrep
esaminare il /cmdline
per ogni voce di elaborazione del PID.
pkill
e pgrep
usa il readproc
chiamata di sistema, mentre killall
non. Non potrei dire se c'è una differenza di prestazioni:dovrai confrontarla da solo.