2

リモート データベースに起動/シャットダウン時間を記録するために、LaunchDaemon として実行している小さな python スクリプトを作成しました。スクリプトが起動すると、起動時間を記録し、一時停止して SIGTERM をキャッチしてシャットダウン時間を記録するのを待ちます。ログイン/ログアウト時の LaunchAgent として、ほぼ同じワークフローが使用されています。

しかし、Apple の突然の終了メカニズムが事態を悪化させているようです。マシンがシャットダウンまたは再起動されたときに、が launchdaemons と launchagents にlaunchdのみ信号を送信しているように見えますが、これは処理できません。SIGKILL私は技術的に間違っているかもしれませんが、それは本質的に私が経験していることです..

launchctl を使用してデーモンを手動でロード/アンロードすると、SIGTERMハンドラーがトリガーされます。ただし、実際のシステム シャットダウンが発生した場合、同じコードはトリガーされません。

を防ぐ方法についての推奨事項はありSIGKILLますか?

4

1 に答える 1

5

私がこの<key>EnableTransactions</key><true/>権利を読んでいる場合、launchd plistに含まれていない限り、デーモンで突然の終了を使用するべきではありません 。しかし、ドキュメントは少し曖昧なので<key>EnableTransactions</key><false/>、plistに追加してみるか、それが機能しない場合は、プログラムからvproc_transaction_beginを呼び出します(Pythonから呼び出すことができると思いますが、メカニズムはわかりません) 。

于 2011-11-23T23:00:43.247 に答える