11

私は、2 つのサブプロセスを開始するデーモンのようなプロセスを持っています (そして、サブプロセスの 1 つが他の 10 までのサブプロセスを開始します)。プロセスをsystemctl stop実行すると、子サブプロセスが「積極的に」強制終了されたように見えます。これによりsystemctl、プロセスがクリーンアップされる機会がありません。

systemctl stopアグレッシブなキルをやめて、プロセスが整然としたクリーンアップを調整できるようにするにはどうすればよいですか?

timeoutSec=30私は無駄にしようとした。

4

2 に答える 2

12

KillMode=[1] デフォルトはcontrol-groupです。つまり、サービスのすべてのプロセスが SIGTERM で強制終了されます。

次の 2 つのオプションがあります。

  • 各プロセスで SIGTERM を処理し、シャットダウンしますTimeoutStopSec(デフォルトは 90 秒 [2])。
  • メイン プロセスからシャットダウンを委任する場合は、 を設定しKillMode=mixedます。SIGTERM はメイン プロセスにのみ送信されます。その後、 内で再度シャットダウンしますTimeoutStopSec。内でシャットダウンしない場合TimeoutStopSec、systemd はSIGKILLすべてのプロセスに送信します。

注:KillMode=mixedの代わりにオプション 2を使用することをお勧めしますKillMode=process。後者はメイン プロセスにのみ最終的なものを送信するためSIGKILLです。つまり、サブプロセスがロックされても強制終了されません。

[1] https://www.freedesktop.org/software/systemd/man/systemd.kill.html#KillMode=

[2] https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#DefaultTimeoutStartSec=

于 2016-12-05T10:02:05.950 に答える