首页 文章

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

提问于
浏览
2

我有一个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 cgdbkill -9 [pid] .

  • sudo 以上版本 .

什么都没有杀死 cgdb 或其中运行的进程 .

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

你怎么样: (a) 干净地退出而没有锁定 cgdbgdb 的所有内容,而在调试过程中, or (b) kill / cleanly(虽然'cleanly'只会锦上添花)停止一个进程's stopped while you'重新调试它不是'响应 kill -9 without 重启?

2 回答

  • 0

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

    它听起来像是一个调试器(或任何另一个进程),也可能被杀死 .

  • 5

    ptrace或pgrep

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

相关问题