GNU/Linux >> Linux Esercitazione >  >> Linux

SIGTERM vs SIGKILL:qual è la differenza?

La conclusione di un processo è una parte cruciale della gestione dei processi in Linux.

Poiché la gestione dei processi è un argomento a sé stante, in questo post non entrerò nei dettagli della gestione dei processi degli utenti e della gestione dei segnali.

Mi concentrerò sull'utilizzo dei segnali SIGTERM e SIGKILL per terminare un processo. Discuterò anche del motivo per cui dovresti evitare di usare SIGKILL.

Cos'è SIGTERM?

Nei sistemi simili a UNIX, il segnale SIGTERM viene utilizzato per terminare un programma. Puoi praticamente indovinarlo dal suo nome che è composto da SIGNal e TERMinate.

Il SIGTERM può anche essere definito soft kill perché il processo che riceve il segnale SIGTERM può scegliere di ignorarlo.

In altre parole, è il modo educato di uccidere un processo.

Come inviare SIGTERM a un processo in Linux?

Il comando kill in Linux viene utilizzato per inviare tutti questi segnali ai processi.

Per impostazione predefinita, il comando kill invia il segnale SIGTERM. Puoi menzionarlo esplicitamente con -15 ma è ridondante.

Avrai bisogno di conoscere il pid del processo per utilizzare questo comando nel modo seguente:

kill <process_id>

Puoi usare il comando ps in Linux per ottenere l'ID del processo.

Cos'è SIGKILL?

Il SIGKILL viene utilizzato per l'interruzione immediata di un processo. Questo segnale non può essere ignorato o bloccato. Il processo verrà terminato insieme ai relativi thread (se presenti).

È il modo brutale di uccidere un processo e dovrebbe essere usato solo come ultima risorsa. Supponiamo che tu abbia un processo che non risponde che desideri chiudere. Il SIGKILL può essere utilizzato in questo caso.

Come inviare SIGKILL a un processo in Linux?

Puoi usare l'opzione -9 per inviare il segnale SIGKILL con il comando kill e terminare immediatamente il processo:

kill -9 <process_id>

SIGTERM vs SIGKILL:perché dovresti preferire SIGTERM piuttosto che SIGKILL?

Sebbene entrambi questi segnali vengano utilizzati per interrompere un processo, ci sono alcune differenze tra i due:

  • SIGTERM interrompe il processo con grazia mentre SIGKILL interrompe il processo immediatamente.
  • Il segnale SIGTERM può essere gestito, ignorato e bloccato ma SIGKILL non può essere gestito o bloccato.
  • SIGTERM non uccide i processi figlio. SIGKILL uccide anche i processi figlio.

Alcuni utenti Linux hanno l'abitudine di usare "kill -9" ed è qualcosa che dovresti evitare. A meno che tu non abbia un processo che non risponde, non è necessario utilizzare SIGKILL.

Con SIGTERM, un processo ottiene il tempo per inviare le informazioni ai suoi processi padre e figlio. I suoi processi figlio sono gestiti da init.

L'uso di SIGKILL può portare alla creazione di un processo zombi perché il processo ucciso non ha la possibilità di dire al processo padre di aver ricevuto un segnale di uccisione.

Questo fumetto di Turnoff spiega ironicamente la differenza tra SIGTERM e SIGKILL.

Spero che tu abbia una migliore comprensione dell'uccisione di un processo utilizzando SIGTERM o SIGKILL ora.

Se hai domande o suggerimenti, non esitare a lasciare un commento.


Linux
  1. Linux vs. Unix:qual è la differenza?

  2. Qual è la differenza tra InnoDB e MyISAM?

  3. Differenza tra SIGKILL SIGTERM considerando l'albero dei processi

  4. Qual è la definizione di una sessione in Linux?

  5. Qual è la differenza tra kill , pkill e killall?

Useradd vs Adduser:qual è la differenza?

iptables vs nftables:qual è la differenza?

DevOps vs Software Engineer:qual è la differenza?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?

HTTP e HTTPS:qual è la differenza?