ステータス:これは、MacOS10.8およびXcode4.4と同じくらい最近見られました。
tl; dr:これは、デバイスで実行している場合とシミュレーターで実行している場合の2つのコンテキストで発生する可能性があります。デバイスで実行している場合、デバイスを切断して再接続すると問題が解決するようです。
マイクアッシュが提案した
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
これは常に機能するとは限りません。実際、それは私にとってはうまくいきませんでしたが、場合によっては明らかにうまくいきます。どちらの場合かわからない。ですから、試してみる価値はあります。
それ以外の場合、これを修正する唯一の既知の方法は、launchdユーザーを再起動することです。再起動するとそれが可能になりますが、それほど劇的で高速な方法はありません。別の管理者ユーザーを作成する必要がありますが、作成する必要があるのは1回だけです。物事がくさびになったら、自分でログアウトし、そのユーザーとしてログインして、メインユーザーに属するlaunchdを強制終了します。
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
の代わりにメインユーザー名を使用しuser_id
ます。通常のユーザーが正常な状態に戻ったら、再度ログインします。ちょっと痛いですが、完全に再起動するほどではありません。
詳細:
これは、Lion /Xcode4.2でより頻繁に発生し始めています。(個人的には、その組み合わせの前にそれを見たことがありません。)
バグはlaunchdにあるようです。これは、デバッガーがアプリプロセスを強制終了せずにデバッグを停止すると、子としてアプリプロセスを継承します。これは通常、アプリがゾンビになり、psでプロセスステータスがZになることで通知されます。
コアの問題は、launchdに実装されているブートストラップネームサーバーにあるようです。これは(私が理解している範囲で)アプリIDをマッハポートにマップします。バグがトリガーされると、アプリは停止しますが、ブートストラップサーバーのネームサーバーマップから削除されません。その結果、ブートストラップサーバーは、アプリの別のインスタンスを同じ名前で登録することを許可しません。
ゾンビのために強制的に起動するwait()
ことで問題が解決することが期待されていましたが(コメントを参照)、そうではありません。主要な問題であるのはゾンビのステータスではなく(これが一部のゾンビが良性である理由です)、ブートストラップネームサーバーであり、この殺害の不足を解消する既知の方法はありません。
バグは、Xcode、gdb、および起動されたユーザーの間の何か悪いことによって引き起こされているようです。iphoneシミュレーターでアプリを実行し、gdb内で停止させてから、ビルドを実行してipadシミュレーターで実行することにより、ウェッジを繰り返しました。シミュレーターの切り替え(iOS 4.3 / iOS 5、iPad / iPhone)に敏感なようです。それはいつも起こるわけではありませんが、私がシミュレーターを頻繁に切り替えるときはかなり頻繁に起こります。
ログイン中に起動されたkillは、セッションを台無しにします。ログアウトして再度ログインしても、launchdされたユーザーが強制終了されることはありません。OS Xは、既存のプロセスを維持します。再起動すると問題は解決しますが、それは苦痛です。上記の手順の方が高速です。
Apple、FWIWにバグを提出しました。rdar://10330930