进程在调试器中崩溃;我如何杀死它
问题描述:
我有一个C++应用程序,它通过USB串行链接连接到微处理器(类似于Arduino)。我使用termios.h
作为我的序列包装。进程在调试器中崩溃;我如何杀死它
我在Mac OS X 10.7.3
上使用cgdb
进行调试。
当我:
cgdb build/my-process
- 设置一些断点,等等,做一些调试
- 发现错误,或尝试退出内部
cgdb
kill
的
仍然在运行过程
该过程挂起。 cgdb
拒绝永远杀死进程 - 只是坐在那里。我相当当然这是因为如果我kill
从应用程序的中途,我从来没有发布我正在访问微控制器通过的/dev/ttyUSB
设备。我不确定是否有东西被锁定,永不解锁,但cgdb
永远不会退出。
我已经试过:
- 基本中断:按Ctrl +ç
-
ps aux | grep 'my-process',
杀-9 PID]`。 -
ps aux | grep cgdb
,kill -9 [pid]
。 -
sudo
以上版本。
没有杀死cgdb
或其中运行的进程。
如果我卸下USB电缆(终止与微处理器的连接),(我认为这可能会导致崩溃的进程崩溃),我开始看到~50%的可用CPU正在使用(不知道是什么),并且一切都锁定了。我不要设法使应用程序崩溃。
你如何:(一)退出干净不从cgdb
或gdb
锁定了一切,而在调试过程中,或(b)杀/干净(虽然“干净”的中间只想在锦上添花)停止一个进程,当你在调试时停止,不是响应kill -9
没有重新启动?
答
您不能杀死处于I/O等待状态的进程。对于大多数情况来说,如果不是所有Unix内核都是从这个时代开始就是如此。
这听起来像是一个调试器(或任何进程的另一个ptrace
)卡在一个I/O等待不能被杀死,无论是。
答
ptrace的或p纤ep
我会尝试“p纤ep -l cgdb”上市的PID非常方便...
我可以设置一个超时或类似的,如果我不能彻底杀死它? – simont 2012-02-25 21:03:52
不,它本质上是一个不可中断的状态。退出状态的唯一方法是成功或不成功完成内核I/O操作。 – smparkes 2012-02-25 21:07:26
这是一个轻微的痛苦 - 谢谢。我一直在抨击我的头脑,试图找出如何杀死这个愚蠢的东西几天。 – simont 2012-02-25 21:16:10