В чем разница между убийством работающей службы демона systemd следующим образом:
kill -SIGKILL 3645
и
systemctl -s kill -SIGKILL 3645
где 3645 - это pid сервиса systemd. Есть ли недостатки у использования первого метода?
Во-первых, ваш systemctl
синтаксис неверен: systemctl kill
ожидает имя устройства, а не PID, и -s
требуется имя сигнала. Как написано, он ничего не сделает, кроме сообщения об ошибке:
Failed to parse signal string kill.
Если вы это исправите, он сообщит вам:
Failed to kill unit 3645.service: Unit 3645.service not loaded.
Правильный синтаксис:
systemctl kill -s SIGWHATEVER whatever.service
Разница, очевидно, в том, что вы можете отправлять сигналы процессам на основе модуля systemd, а не pid. Поскольку модуль может запускать несколько процессов, systemd может отправить тот же сигнал в все процессы, запущенные под модулем, и действительно, это значение по умолчанию. В --kill-who=
опция позволяет вам изменить это при необходимости.
В целом, однако, не стоит иметь привычку посылать SIGKILL кому-либо. По возможности вы должны останавливать свои службы в обычном режиме, например с участием systemctl stop whatever.service
. SIGKILL - это то же самое, что и потенциально деструктивный kill -9
вы наверняка слышали о нем и вас предупреждали. И, если вы убиваете службу любым из методов и она настроена на автоматический перезапуск, она может это сделать. Это может быть или не быть тем, что вы хотите, в зависимости от Зачем вы пытаетесь отправить сигнал об уничтожении.