私は、OS X でデーモンの自己アップデーターを実装する作業を行っています。更新は .pkg ファイルとして公開されているため、次のようにしようとしています。更新が利用可能であることがデーモンに通知されると、 system() 呼び出しを介してインストーラーを呼び出し、パッケージをインストールします。このパッケージには、新しいバージョンのデーモン、デーモンを停止するアップグレード前スクリプト ( launchctl unload /Library/LaunchDaemons/foo.plist
)、および新しいバージョンのインストール後にデーモンをバックアップするポストフライト スクリプトが含まれています。私が抱えている問題は、インストーラー プロセスが途中で終了することです。インストーラーが親プロセスを更新するために親プロセスを強制終了し、独自の孤立したプロセスとして続行するのではなく、自分自身を強制終了したことが原因である可能性があると思われます。私は運がないので、次のことを試しました:
- '&' を使用してインストーラー コマンドを後置し、バックグラウンドで実行する
- インストーラー コマンドをnohupでラップする
インストール コマンドは、コマンド ラインから実行するとエラーなしで一貫して完了し、インストーラーから実行すると一貫して失敗します。インストーラーから呼び出されると、出力をファイルにパイプしますが、何もない場合もあれば、出力が停止する前にインストールが約 41% 完了したことを示す場合もあります。プロセスに何が起こっているのかを把握したり、親なしでプロセスが存続していることを確認したりする方法についてのアイデアはありますか?