2
SIGKILLを介して終了するようにバグのあるsystemdサービスを構成する
バックグラウンド systemd新しいサービスのスクリプトを作成するように依頼されました。これはfoo_daemon、「悪い状態」になることもあり、経由しないこともありますSIGTERM(カスタムシグナルハンドラのせいで)。これは、次の方法でサービスを開始/停止/再起動するように指示されているため、開発者にとって問題です。 systemctl start foo_daemon.service systemctl stop foo_daemon.service systemctl restart foo_daemon.service 問題 時には、foo_daemon悪い状態になるために、強制的に強制終了する必要があります: systemctl kill -s KILL foo_daemon.service 質問 どのようにすることができますが、私のセットアップ私のsystemdためのスクリプトをfoo_daemonするように、停止へのユーザーの試みは/サービスを再起動するたびに、systemd以下となります。 foo_daemonviaの正常なシャットダウンを試みSIGTERMます。 シャットダウン/終了がfoo_daemon完了するまで最大2秒かかります。 プロセスがまだ有効な場合は、foo_daemonviaの強制シャットダウンを試行しSIGKILLます(したがって、PIDがリサイクルされたり、間違ったPIDに対してsystemd問題が発生するリスクはありませんSIGKILL)。私たちがテストしているデバイスは、多数のプロセスを迅速に生成/分岐するため、PIDリサイクルが問題の原因となることはめったにありませんが、非常に現実的な懸念があります。 実際に、PIDのリサイクルについて単に妄想しているだけであれば、スクリプトはSIGKILL、リサイクルされたPIDを殺すことを心配せずに、プロセスのPIDに対して発行するだけで構いません。