0

我正在尝试编写一个使用串行端口的 OS X 应用程序。我找到了一个示例(可可)并让它在 Xcode 4 中运行。在第一次运行时,它打开了端口,我能够与硬件交换数据。

如果我尝试更改端口,程序就会变得流氓。风车启动,用户界面无响应。我无法从 Xcode 中停止程序,也无法从终端或强制退出中杀死它。Xcode 的强制退出不会这样做。尽管 PID 随着终端的杀戮而消失,但 UI 仍然存在,并伴随着旋转的风车。

唯一的出路是重新启动。欢迎任何关于如何追踪错误代码的想法。我是 Cocoa/Objective C 的新手,所以简单的术语更好。

4

1 回答 1

0

很可能它变成了僵尸。它应该ps auxww以“Z”的状态显示(或类似的)。活动监视器也可能仍会显示它。

这在使用硬件(例如串行端口)时比较常见。僵尸的出现可能有两个原因,在这种情况下很可能是第一个:

  1. 该进程在某种内核调用中被阻塞,这是不可中断的。
  2. 该进程已退出,但其父进程尚未确认(通过 wait() 或类似方法)。

在第一种情况下,它通常是某种基本错误或设计缺陷,除了弄清楚到底是什么代码路径解决了问题并避免这种情况之外,您可能没有任何好的选择。

在第二种情况下,解决方案通常很简单——找到你的僵尸的父进程并杀死它。根据需要重复,直到你的僵尸被调用 wait() 的父进程收养(如果没有别的,launchd 会这样做)。

于 2012-12-12T02:54:49.390 回答