我正在尝试编写一个使用串口的OS X应用程序。我找到了一个示例(cocoa),并在Xcode4中运行了它。在第一次运行时,它打开了端口,我可以与硬件交换数据。
如果我试图改变端口,程序就会变得异常。风车启动,UI无响应。我不能从Xcode中停止程序,也不能从终端中终止它,或者强制退出。强制退出Xcode不能做到这一点。尽管PID从终端上消失了,但UI仍然存在于愉快旋转的风车上。
唯一的出路就是重新启动。欢迎任何关于如何追踪错误代码的想法。我是Cocoa/Objective C的新手,所以简单的术语更好。
发布于 2012-12-12 10:54:49
很有可能它变成了僵尸。它应该在ps auxww (或类似的)中显示,其状态中应该有一个'Z‘。活动监视器也可能仍然显示它。
这在使用硬件时比较常见,例如串行端口。僵尸可能出于两个原因之一出现,在这种情况下最有可能是第一个原因:
等待等待进程在某种类型的内核调用中被阻塞,即interruptible.
在第一种情况下,这通常是一个基本的bug或某种设计缺陷,您可能没有任何好的选择,除非准确地找出是什么代码路径引起的问题,并避免这种情况。
在第二种情况下,解决方案通常很简单-找到僵尸的父进程并杀死它。根据需要重复上述步骤,直到您的僵尸被某个父进程采用,该父进程会调用wait()来获取僵尸(如果没有其他事情,launchd将执行此操作)。
https://stackoverflow.com/questions/13831247
复制相似问题