我正在 OSX 10.9.4 上使用 Xcode 5.1.1 来调试 Cocoa + OpenGL 应用程序。到目前为止,我只在 Xcode 调试器下运行过我的应用程序。上周,我退出 Xcode,却发现我的应用程序的图标仍然位于 Dock 中。使用 Show In Finder 使我在 Xcode 的 DerivedData 中找到了一个调试可执行文件。我最终重新启动电源以摆脱它(更多内容),直到今天一切都很好。但现在我的 Dock 中有两个这样的图标。
问题:这些应用程序无法被杀死!强制退出不会执行任何操作。它们不会显示在使用“ps aux”或事件监视器的进程列表中。重新启动只会陷入试图摆脱它们的循环中。只有强制重新启动 Mac 才有效。
根据 NSWorkspace 的 runningApplication 方法,有与这些应用程序关联的 NSRunningApplication 实例。但进程 ID 与实际进程并不对应。控制台日志中没有任何相关内容。
还有人遇到过这种情况吗?对于让 NSWorkspace 摆脱虚假的 NSRunningApplication 实例有什么建议吗?
最佳答案
编辑:
我发现了问题的根本原因!
“拥有”伪僵尸 Dock NSRunningApplication 的应用程序在迭代 IORegistryEntryGetChildIterator()
的每个子项后未调用 IOObjectRelease()
。
啊,我花了几个月的时间才终于找到这个问题。
基本上,我使用断点对应用程序“伪僵尸化”其他应用程序的 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 中显示...”又名 [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:urls];
将在我的应用程序中停止工作。
关于xcode - 无法杀死的虚假 NSRunningApplication 坐在我的 Dock 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648715/