状态:最近被视为Mac OS 10.8和Xcode 4.4。
tl; dr:这可能在两种情况下发生:在设备上运行时和在模拟器上运行时。在设备上运行时,断开并重新连接设备似乎可以解决问题。
Mike Ash建议
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
这并不总是有效。实际上,它对我从来没有用过,但在某些情况下显然可以使用。只是不知道哪种情况。因此,值得尝试。
否则,解决此问题的唯一已知方法是重新启动用户启动。重新启动可以做到这一点,但是没有那么激烈/快速的方法。您需要创建另一个管理员用户,但只需执行一次。当事情陷入困境时,以您自己的身份注销,以该用户身份登录,并杀死属于您的主要用户的启动项,例如,
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
将您的主要用户名替换为user_id
。以普通用户的身份再次登录,使您回到理智的状态。有点痛苦,但要比完全重新启动少。
细节:
在Lion / Xcode 4.2中,这种情况开始经常发生。(就我个人而言,在组合之前我从未见过。)
该错误似乎已启动,该错误在调试器停止调试而不杀死它时以子代的形式继承应用程序进程。这通常是因为该应用成为僵尸而发出信号,进程状态为ps的Z。
核心问题似乎在启动中实现的引导程序名称服务器中。这(据我所知)将应用程序ID映射到马赫端口。触发错误后,应用程序死亡,但没有从引导程序服务器的名称服务器映射中清除,因此,引导程序服务器拒绝允许以相同名称注册该应用程序的另一个实例。
希望(见评论)强迫wait()
僵尸发动能够解决问题,但不能解决问题。核心问题不是僵尸状态(这就是为什么某些僵尸是良性的),而是引导程序名称服务器,没有已知的方法可以消除这种启动的杀戮现象。
看起来该错误是由Xcode,gdb和用户启动之间的错误触发的。我只是通过在iphone模拟器中运行一个应用程序,使其停止在gdb中,然后进行构建并运行到ipad模拟器来重复执行该操作。它似乎对切换模拟器(iOS 4.3 / iOS 5,iPad / iPhone)敏感。当我频繁切换模拟器时,它不会一直发生,而是相当频繁地发生。
登录时启动的杀死操作会破坏会话。注销并重新登录不会杀死启动的用户;OS X使现有过程保持不变。重新启动将解决问题,但这很痛苦。上面的说明速度更快。
我已经向FWIW苹果提交了一个错误。rdar:// 10330930