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