NSTaskを使用してヘルパー アプリケーションを実行します。私の顧客システムの 99% 1 つでこれは正常に動作しますが、2 つはそうではないことを私に知らせてきました。そのうちの 1 つは、リモート デスクトップごとに問題を調査できるほど親切でした。
問題がこれらのバッファをいっぱいにすることに関連していないことを確認するために、StandardOutput/StandardError に対してさまざまなNSPipe/NSFileHandleの組み合わせを試しました。例1と2。私の推測では、非常に多くのシステムで正常に動作し、_dyld_start はアプリケーション ライフサイクルの早い段階で StandardOutput/StandardError を埋めることができないため、関連していないと考えられます。
問題に関するその他の注意事項:
- ターミナルからヘルパー アプリを起動すると正常に動作します。
- スタックしたプロセスとアフターワースで gdb をアタッチおよびデタッチすると正常に動作し、終了するとNSTaskは-waitUntilExitの後に作業を開始します。
- NSTaskの代わりにfork(2)とexecv(3)を使用すると、ヘルパーを正常に起動して実行できます。
- 親プロセスはサンドボックス化されていますが、以前のレポートでは Mac OS X 10.6/10.7 でサンドボックス化されていないと思います。
アクティビティ モニターからのプロセス サンプルのスクリーンショット:
ヘルパーが _dyld_start で立ち往生している理由を理解するための手がかりやデバッグのヒントは大歓迎です!