web-dev-qa-db-fra.com

Tuer le service systemd avec et sans systemctl

Quelle est la différence entre tuer un service systemd démon en cours d'exécution comme ceci:

kill -SIGKILL 3645

et

systemctl -s kill -SIGKILL 3645

où 3645 est le pid du service systemd. Y a-t-il également des inconvénients à utiliser la première méthode?

4
Gordon

Tout d'abord, votre syntaxe systemctl est incorrecte: systemctl kill Attend un nom d'unité, pas un PID, et -s Requiert un nom de signal. Comme écrit, il ne fera rien mais vous donnera un message d'erreur:

Failed to parse signal string kill.

Si vous corrigez cela, il vous dira alors:

Failed to kill unit 3645.service: Unit 3645.service not loaded.

La syntaxe correcte serait:

systemctl kill -s SIGWHATEVER whatever.service

La différence, évidemment, est que vous pouvez envoyer des signaux à des processus basés sur l'unité systemd, plutôt qu'à pid. Puisqu'une unité peut exécuter plusieurs processus, systemd peut alors envoyer le même signal à tous processus exécutés sous l'unité, et en effet, c'est la valeur par défaut. L'option --kill-who= Vous permet de modifier cela si nécessaire.

En règle générale, cependant, ce n'est pas une bonne idée de prendre l'habitude d'envoyer SIGKILL à quoi que ce soit. Vous devez arrêter vos services normalement chaque fois que possible, par exemple avec systemctl stop whatever.service. SIGKILL est le même que le kill -9 Potentiellement destructeur dont vous avez probablement entendu parler et dont vous avez été averti. Et, si vous tuez un service via l'une ou l'autre méthode et qu'il est configuré pour redémarrer automatiquement, il peut le faire. Cela peut ou non être ce que vous voulez, selon pourquoi vous essayez d'envoyer un signal de mise à mort.

8
Michael Hampton