我有一个C ++应用程序,它通过USB串行链路连接到微处理器(类似于Arduino)。我使用termios.h
作为我的串行包装器。
我在Mac OS X cgdb
上使用10.7.3
进行调试。
当我:
cgdb build/my-process
kill
cgdb
查找错误或尝试退出仍在运行的流程
该过程挂起。 cgdb
拒绝杀死这个过程 - 只是坐在那里。我相当确定这是因为如果我kill
从应用程序的中途开始,我就永远不会释放我正在访问微控制器的/dev/ttyUSB
设备。我不确定某些东西是否被锁定并且从未解锁,但cgdb
永远不会退出。
我试过了:
ps aux | grep 'my-process',
kill -9 [pid]`。 ps aux | grep cgdb
,kill -9 [pid]
。 sudo
个版本。 没有任何东西杀死cgdb
或其中运行的进程。
如果我移除USB电缆(终止与微处理器的连接),(我认为这可能会导致崩溃的进程崩溃),我开始看到~50%的可用CPU被使用(不确定是什么),一切都锁定了。我不设法让应用程序崩溃。
你如何:(a)干净地退出,而不是在调试流程的过程中从cgdb
或gdb
锁定所有内容,或(b)杀死/干净(虽然'干净'只会锦上添花)停止在你调试不是的过程中停止的过程在没有重启的情况下回复kill -9
?
答案 0 :(得分:5)
您无法终止I / O等待中的进程。对于大多数(如果不是全部)Unix内核来说,从那个时代开始就是如此。
它听起来像一个调试器(或任何ptrace
另一个进程),卡在I / O等待中也不会被杀死。
答案 1 :(得分:0)
ptrace或pgrep
我会尝试“pgrep -l cgdb”非常方便列出pid ......