我在OSX 10.9.4上使用Xcode 5.1.1来调试Cocoa + OpenGL应用程序。到目前为止,我只在Xcode调试器下运行我的应用程序。上周我退出Xcode只是为了找到我的应用程序的图标仍然在Dock中。使用Show In Finder让我在Xcode的DerivedData中找到了一个调试可执行文件。我最终重新启动它以摆脱它(更多关于它)并且直到今天都很好。但我现在在我的Dock中有两个这些图标。
问题:这些应用无法被杀! Force Quit什么都不做。它们不会使用'ps aux'或Activity Monitor显示在进程列表中。重启刚刚陷入循环,试图摆脱它们。只有强行重启Mac才能正常工作。
根据NSWorkspace的runningApplication方法,有与这些应用程序关联的NSRunningApplication实例。但是进程ID与实际进程不对应。控制台日志中没有任何相关内容。
其他人遇到过这个吗?有关让NSWorkspace摆脱虚假NSRunningApplication实例的任何建议吗?
答案 0 :(得分:1)
编辑:
我发现了问题的根本原因!
“拥有”伪僵尸Dock NSRunningApplication的应用程序在迭代IOObjectRelease()
的每个子节点后没有调用IORegistryEntryGetChildIterator()
。
Gah这花了我几个月才最终追踪到这一点。
基本上我使用断点来对应用程序'伪僵尸化'其他应用程序'NSRunningApplication的确切时刻进行二进制搜索。
仍然不明白为什么IORegistry迭代会劫持NSRunningApplication。
这为我解决了这个问题:
sudo killall launchservicesd; sudo killall Dock; sudo killall Finder;
或.bashrc:
alias killdock="sudo killall launchservicesd; sudo killall Dock; sudo killall Finder;"
注意:如果你还没有杀死Finder,那么'在Finder中显示......'a.k.a。[[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:urls];
在我的应用程序中停止工作。