Qual'è la differenza tra kill, pkill e killall


31

Ho familiarità con il killcomando e la maggior parte delle volte usiamo semplicemente kill -9 per uccidere un processo con forza, ci sono molti altri segnali che possono essere utilizzati kill. Ma mi chiedo quali sono i casi d'uso di pkille killall, se esiste già un comando kill.

Fare pkille killallutilizzare il killcomando nel loro attuazione? Voglio dire, sono solo wrapper killo hanno una propria implementazione?

Vorrei anche sapere come il pgrepcomando 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?


2
Due cose: perché usare kill -9di default? -15 (per favore, fermati) e -1 (il modem si è riagganciato, per favore, PULITI te stesso chiuso) sono molto più educati. In secondo luogo. Attenzione all'utilizzo di killall su scatole non Linux. Potrebbe comportarsi diversamente. (Ad esempio su Solaris uccide tutto. NON FILTRATO sui nomi dei processi).
Hennes,

Risposte:


31

Il killcomando è un wrapper molto semplice per la kill chiamata di sistema , che conosce solo gli ID di processo (PID). pkille killallsono anche wrapper per la kill chiamata di sistema , (in realtà, per la libreria libc che richiama direttamente la chiamata di sistema), ma può determinare i PID per te, in base a cose come, nome del processo, proprietario del processo, ID sessione, ecc.

Come pkille come killalllavorare possono essere visti usando ltraceo stracesu di essi. Su Linux, entrambi leggono il /procfilesystem e, per ogni pid (directory) trovato, percorre il percorso in modo da identificare un processo con il suo nome o altri attributi. Come ciò è tecnicamente parlando, specifico per kernel e sistema. In generale, leggono da /proc/<PID>/statquale contiene il nome del comando come secondo campo. Per pkill -fed pgrepesaminare la /cmdlinevoce per ogni voce proc di PID.

pkille pgrepusa la readprocchiamata di sistema, mentre killallnon lo fa. Non potrei dire se c'è una differenza di prestazioni: dovrai confrontarla da sola.


2

kill e killall sono strumenti che forniscono un modo per uccidere un processo. Il primo dal suo PID, il secondo dal suo nome. pgrep (list) e pkill (kill di default) sono strumenti che forniscono un modo per inviare un messaggio a un processo con il suo nome o altri attributi vedi: http://linux.die.net/man/1/pkill Per maggiori informazioni su segnali: http://linux.die.net/man/7/signal


Vuoi dire che killallè usato per uccidere un processo con il suo nome? e usa pgrep per questo scopo? e killalluccide anche tutti i processi figlio,? quale segnale killallusa di default?
Ijaz Ahmad Khan,

3
... a meno che tu non sia su Solaris, nel qual caso killallucciderà tutti i processi che hai il diritto di uccidere, in modo che se sei root, riavvii effettivamente il server.
Jenny D,

1
sì: killall chromiumucciderà il processo di cromo, pgrep chromiumti darà l'elenco PID, pkill chromiumucciderà il cromo. killall invierà di default il segnale SIGTERM (come pkill)
dervishe il
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.