首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道哪个进程(stat: T)是由gdb附加的?

如何知道哪个进程(stat: T)是由gdb附加的?
EN

Stack Overflow用户
提问于 2011-07-12 03:54:27
回答 3查看 9.5K关注 0票数 5

当gdb附加进程时,进程的stat为"T",类似于:

代码语言:javascript
复制
root      6507  0.0  0.0  67896   952 ?        Ss   12:01   0:00 /mytest
root      6508  0.0  0.0 156472  7120 ?        Sl   12:01   0:00 /mytest
root     26994  0.0  0.0  67896   956 ?        Ss   19:59   0:00 /mytest
root     26995  0.0  0.0 156460  7116 ?        Tl   19:59   0:00 /mytest
root     27833  0.0  0.0  97972 24564 pts/2    S+   20:00   0:00 gdb /mytest

从上述情况来看,26995可能正在调试。我怎么知道26995是调试的还是不调试的?或者我能知道gdb(27833)附加了哪个进程吗?

pstree -p 27833 -显示gdb(27833)

另一个问题:如何知道进程(stat: T)附加了gdb(PID)?,在大多数情况下,我不是调试进程的人。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-12 04:48:07

Tps输出中表示“The ptrace()d”。所以这个过程(26995)正在被某种东西所追踪。最常见的情况是GDBstrace

因此,如果您知道您只运行GDB而不是strace,如果您看到单个进程处于T状态,那么您就知道您正在调试该进程。

您还可以问GDB它正在调试哪个进程(Es):

代码语言:javascript
复制
(gdb) info process
(gdb) info inferior

正如Matthew正确指出的那样,更新T只是意味着进程停止了,而不是表示它是ptrace()d

因此,更好的解决办法是这样做:

代码语言:javascript
复制
 grep '^TracerPid:' /proc/*/status | grep -v ':.0'
 /proc/7657/status:TracerPid:    31069

从上面的输出可以看出,进程7657正在被进程31069跟踪。这既回答了“哪个进程是调试器”,也回答了“哪个调试器正在调试什么”。

票数 9
EN

Stack Overflow用户

发布于 2011-07-13 03:33:31

/proc文件系统是Linux的远程设计。从/proc/{PID}/中可以找到许多进程实时信息.

另一个问题:如何知道进程(stat: T)是由哪个gdb(PID)附加的?在大多数情况下,我不是正在调试过程的人。

对于这个问题,我们可以检查/proc/{PID}/status文件来得到答案。

代码语言:javascript
复制
root     14616  0.0  0.0 36152  908 ?        Ss   Jun28   0:00 /mytest
root     14617  0.5  0.0 106192 7648 ?       Sl   Jun28 112:45 /mytest
tachyon   2683  0.0  0.0 36132 1008 ?        Ss   11:22   0:00 /mytest
tachyon   4276  0.0  0.0 76152 20728 pts/42  S+   11:22   0:00 gdb /mytest
tachyon   2684  0.0  0.0 106136 7140 ?       Tl   11:22   0:00 /mytest

主机1-8>cat /proc/2684/status

代码语言:javascript
复制
Name:   mytest
State:  T (tracing stop)
SleepAVG:       88%
Tgid:   2684
Pid:    2684
PPid:   2683
TracerPid:      4276
.......

因此,我们知道2684是由进程4276调试的。

票数 6
EN

Stack Overflow用户

发布于 2011-07-12 07:53:47

您可以从ps axf输出中找到这个信息。

代码语言:javascript
复制
 1357 ?        Ss     0:00 /usr/sbin/sshd
 1935 ?        Ss     0:00  \_ sshd: root@pts/0
 1994 pts/0    Ss     0:00      \_ -bash
 2237 pts/0    T      0:00          \_ gdb /bin/ls
 2242 pts/0    T      0:00          |   \_ /bin/ls
 2243 pts/0    R+     0:00          \_ ps axf

这里,进程2242正在由gdb进程2237进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6659308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档