关于macos:进程在调试器中崩溃; 我怎么杀了它

Process crashed in debugger; how do I kill it

我有一个C ++应用程序,它通过USB串行链路连接到微处理器(类似于Arduino)。我使用termios.h作为我的串行包装器。

我在Mac OS X 10.7.3上使用cgdb进行调试。

当我:

  • cgdb build/my-process
  • 设置一些断点等,做一些调试
  • 查找错误,或尝试使用cgdb内的kill退出仍在运行的进程

这个过程挂了。 cgdb拒绝杀死这个过程 - 只是坐在那里。我很确定这是因为如果我从应用程序的中途开始kill,我就永远不会发布我正在访问微控制器的/dev/ttyUSB设备。我不确定某些东西是否被锁定并且从未解锁,但cgdb永远不会退出。

我试过了:

  • 基本中断:Ctrl + C
  • ps aux | grep 'my-process', kill -9 [pid]`。
  • ps aux | grep cgdbkill -9 [pid]
  • sudo以上的版本。

什么都不会杀死cgdb或其中运行的进程。

如果我移除USB电缆(终止与微处理器的连接),(我认为可能会崩溃崩溃的过程),我开始看到~50%的可用CPU被使用(不确定是什么),一切都锁定了。我没有设法让应用程序崩溃。

你如何:(a)干净地退出,而不是在调试过程中从cgdbgdb锁定所有东西,或者(b)杀死/干净(虽然'干净'只会锦上添花)在没有重新启动的情况下,在调试没有响应kill -9的情况下停止一个停止的进程?


你无法杀死I / O等待中的进程。 对于大多数(如果不是全部)Unix内核来说,从那个时代开始就是如此。

它听起来像一个调试器(或任何ptrace另一个进程),卡在I / O等待中也不会被杀死。


ptrace或pgrep

我会尝试"pgrep -l cgdb"非常方便列出pid ...