GNU/Linux >> Tutoriels Linux >  >> Linux

SIGTERM vs SIGKILL :Quelle est la différence ?

L'arrêt d'un processus est une partie cruciale de la gestion des processus sous Linux.

Étant donné que la gestion des processus est un sujet à part entière, je n'entrerai pas dans les détails de la gestion des processus utilisateur et de la gestion des signaux dans cet article.

Je vais me concentrer sur l'utilisation des signaux SIGTERM et SIGKILL pour terminer un processus. Je vais également expliquer pourquoi vous devriez éviter d'utiliser SIGKILL.

Qu'est-ce que SIGTERM ?

Dans les systèmes de type UNIX, le signal SIGTERM est utilisé pour terminer un programme. Vous pouvez à peu près le deviner à partir de son nom composé de SIGnal et TERMinate.

Le SIGTERM peut également être appelé soft kill car le processus qui reçoit le signal SIGTERM peut choisir de l'ignorer.

En d'autres termes, c'est la manière polie de tuer un processus.

Comment envoyer SIGTERM à un processus sous Linux ?

La commande kill sous Linux est utilisée pour envoyer tous ces signaux aux processus.

Par défaut, la commande kill envoie le signal SIGTERM. Vous pouvez le mentionner explicitement avec -15 mais c'est redondant.

Vous aurez besoin de connaître le pid du processus afin d'utiliser cette commande de la manière suivante :

kill <process_id>

Vous pouvez utiliser la commande ps sous Linux pour obtenir l'ID de processus.

Qu'est-ce que SIGKILL ?

Le SIGKILL est utilisé pour l'arrêt immédiat d'un processus. Ce signal ne peut pas être ignoré ou bloqué. Le processus sera terminé avec ses threads (le cas échéant).

C'est la façon brutale de tuer un processus et elle ne devrait être utilisée qu'en dernier recours. Supposons que vous ayez un processus qui ne répond pas que vous souhaitez fermer. Le SIGKILL peut être utilisé dans un tel cas.

Comment envoyer SIGKILL à un processus sous Linux ?

Vous pouvez utiliser l'option -9 pour envoyer le signal SIGKILL avec la commande kill et tuer le processus immédiatement :

kill -9 <process_id>

SIGTERM vs SIGKILL :Pourquoi préférer utiliser SIGTERM plutôt que SIGKILL ?

Bien que ces deux signaux soient utilisés pour tuer un processus, il existe quelques différences entre les deux :

  • SIGTERM tue gracieusement le processus tandis que SIGKILL tue le processus immédiatement.
  • Le signal SIGTERM peut être géré, ignoré et bloqué mais SIGKILL ne peut pas être géré ou bloqué.
  • SIGTERM ne tue pas les processus enfants. SIGKILL tue également les processus enfants.

Certains utilisateurs de Linux ont l'habitude d'utiliser "kill -9" et c'est quelque chose que vous devriez éviter. À moins que votre processus ne réponde pas, vous n'avez pas besoin d'utiliser SIGKILL.

Avec SIGTERM, un processus a le temps d'envoyer les informations à ses processus parents et enfants. Ses processus enfants sont gérés par init.

L'utilisation de SIGKILL peut conduire à la création d'un processus zombie car le processus tué n'a pas la possibilité de dire à son processus parent qu'il a reçu un signal de mise à mort.

Cette bande dessinée de Turnoff explique avec humour la différence entre SIGTERM et SIGKILL.

J'espère que vous comprenez mieux comment tuer un processus en utilisant SIGTERM ou SIGKILL maintenant.

Si vous avez des questions ou des suggestions, n'hésitez pas à laisser un commentaire.


Linux
  1. Linux vs Unix :Quelle est la différence ?

  2. Quelle est la différence entre InnoDB et MyISAM ?

  3. Que signifie la sortie de Ps ?

  4. VPS géré vs VPS non géré :quelle est la différence ?

  5. Quelle est la différence entre strtok_r et strtok_s en C ?

Useradd vs Adduser :quelle est la différence ?

iptables vs nftables :quelle est la différence ?

DevOps vs ingénieur logiciel :quelle est la différence ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?

HTTP vs HTTPS :quelle est la différence ?