このように実行中のデーモンsystemdサービスをkillすることの違いは何ですか?
kill -SIGKILL 3645
そして
systemctl -s kill -SIGKILL 3645
ここで、3645はsystemdサービスのPIDです。最初の方法を使用することの欠点はありますか?
まず、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
違いは明らかに、pidではなくsystemdユニットに基づいてプロセスにシグナルを送信できることです。ユニットは複数のプロセスを実行する可能性があるため、systemdは同じシグナルをユニットの下で実行されているallプロセスに送信できます。これが実際にデフォルトです。 --kill-who=
オプションを使用すると、必要に応じてこれを変更できます。
ただし、一般的には、SIGKILLを何かに送信する習慣をつけることはお勧めできません。可能な限り、サービスを通常どおり停止する必要があります。 systemctl stop whatever.service
。 SIGKILLは、おそらく聞いて警告されている、破壊的な可能性のあるkill -9
と同じです。また、いずれかの方法でサービスを強制終了し、サービスが自動的に再起動するように構成されている場合は、再起動することがあります。これは、キル信号を送信しようとしているwhyに応じて、必要な場合とそうでない場合があります。