私のMBPがSTARNET Initプロシージャを実行するように要求されたように聞こえるような、特に重いXcodeセッションの後、私はこのゾンビプロセスナンセンスを調べることに決めました。結局のところ、フォークは役に立たないUnixボックスです。私はかもしれない良いニュースがあります。うまくいけば、我々は見るでしょう。 10.8.2でXcode 4.6を実行しています。
ゾンビ問題は、GDBまたはLLDBの使用状況に関係なく発生するようです。シミュレータ内で実行されているアプリケーションは、デバッグプロセス(GDBまたはLLDBの場合は "debugserver")によって所有されます。 「停止」を押すと、シミュレータで実行中のアプリプロセスがゾンビになります。これは、不完全なシャットダウンシーケンスのように聞こえます。
「停止」を押すよりもむしろ、私はアプリケーションを一時停止し、デバッグコンソール(私の場合はLLDB)で、「プロセスデタッチ」を使用して実行中のアプリケーションから切り離しました。速いpsはdebugserverがもはや走っていないことを確認します...これまでのところ良いです!今、アプリケーションはシミュレータ自体で実行されていますが、デバッグされていません。実際、停止ボタンを押すことは今やノーオペレーションです。
シミュレータで、ホームボタンを押してスプリングボードに戻り、ホームボタンをダブルクリックして手動でアプリケーションを終了します。コマンドラインに行き、ゾンビを探してください...ゾンビはありません!わーい。
だから次のステップは、このようなシャットダウン手順をPythonスクリプトなどで実行する合理的な方法があるかどうかを確認することです。 'GDB上であれば助けにならないコース。私が単一のデバッグコンソールコマンドでクリーンなシャットダウンを行うことができれば、壊れた停止ボタンに当たらないようにするだけです。たぶん、それを完全に無効にするには、リソースハックがあります... :)
EDIT#1:興味深い情報のカップル...
1)Xcodeで停止ボタンを押すだけであからさまなデバッグとアプリのプロセスを殺します - - 完全なシャットダウンは一切行いません。アプリケーションデリートのprintfデバッグapplicationWillTerminateとapplicationDidEnterBackgroundは、実行中のアプリケーションが偏見を持って殺されていることを示します。コンソールにはNSLogは表示されません。 [のUIApplication terminateWithSuccess]を呼び出して、デバッグコンソールで
2)は、アプリが「適切」に終了するようになりますが、それでもあなたはブレークポイントが設定されている場合は、興味深いことに、アプリは終了しません...ゾンビを残し:
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
[(UIApplication *)[UIApplication sharedApplication] terminateWithSuccess]
error: Execution was interrupted, reason: breakpoint 2.1.
The process has been returned to the state before execution.
(lldb) breakpoint disable 2.1
1 breakpoints disabled.
(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
[(UIApplication *)[UIApplication sharedApplication] terminateWithSuccess]
2013-03-25 01:28:00.186 iPhone Testbed[9481:c07] -[AppDelegate applicationWillTerminate:]
(lldb)
アプリは何らかのシャットダウンプロセスを経て、コンソールでショーを終了しますが、まだゾンビがあるので、まだ完全シャットダウンではありません。
私は、この全部が、iOSランタイム内のバックグラウンドに向かうアプリと関係していると考えています。 iOSランタイムは適切なシャットダウンやクリーンアップを実行できません。実際、バーンボードはアプリがバックグラウンドで実行されていると考えています。プロセスはもはや存在しません。私たちのiOSとOS Xのランタイムは同じなので、ゾンビを所有しています。
私はこのすべての解決策が、iOSレベルでのクリーンなシャットダウン手順を決定しており、少なくともデバッグコンソールでそのことを実行できると考えています。私は、デバッグデタッチ時にアプリケーションのシャットダウンをきちんとするために、実行時に(plistとは対照的に)実行時に必要なビットを設定できるかどうかを見てみましょう...
私は437ゾンビとカウントしています。遅かれ早かれ起こる唯一の問題は、新しいプロセスを開始することができないということです。ゾンビを念頭に置いてください。なぜ私がもうコンパイルできなかったのかを理解してくれました。また、http://stackoverflow.com/a/7860828/457406 –
@eskerを参照してください。再起動とは別に解決策を見つけましたか? –
いいえ、私が理解する限り、それはそれがうまくいく方法です。 'launchd'に属するゾンビプロセスについて、以下の議論を参照してください。潜在的な唯一の問題は、しばらくすると 'pid'を使い果たす可能性があるようです。 –