赞
踩
大家都知道,gdb的调试功能非常强大,可以attach到打开调试开关编译出来的进程上调试进程,但是在这个流程中,你首先需要ps -ef | grep到你那个进程,然后找到进程号,然后再使用gdb attach命令attach进进程。
首先,这个就比较麻烦,需要执行三条命令;其次,这个方法也肯定不是一个自动化attach进进程所应该允许的流程。
这里就介绍一条命令,能够一条命令attach到进程上,且能够给自动化脚本使用。
gdb attach $(ps -ef | grep process_name | grep -v grep | awk '{print $2}')
示例:
找一个带acpid的进程
ps进程查看到的结果(有两个进程,一个acpid进程,一个grep进程)
ubuntu@VM-7-212-ubuntu:/lib/modules/4.4.0-53-generic$ ps -ef | grep acpid
root 899 1 0 Apr06 ? 00:00:00 /usr/sbin/acpid
ubuntu 11798 9298 0 16:46 pts/1 00:00:00 grep --color=auto acpid
使用对应命令
ubuntu@VM-7-212-ubuntu:/lib/modules/4.4.0-53-generic$ ps -ef | grep acpid | grep -v grep | awk '{print $2}'
899
如果叫这个名字的有多个进程的话,那么则需要进一步过滤,但这个就不是本文所讨论的范围了(应该就算是这样,也基本上可以通过调整grep关键字和ps的选项来找到对应进程)
当然举个例子,本台示例机器上启动着多个带有agent字的进程
ubuntu@VM-7-212-ubuntu:/lib/modules/4.4.0-53-generic$ ps -ef | grep agent
root 1185 1 0 Apr06 ? 00:00:01 /usr/local/qcloud/stargate/sgagent -d
root 1188 1 0 Apr06 ? 00:03:05 /usr/local/sa/agent/secu-tcs-agent
root 1256 1 0 Apr06 ? 00:00:03 barad_agent
root 1271 1256 0 Apr06 ? 00:00:31 barad_agent
root 1272 1256 0 Apr06 ? 00:05:57 barad_agent
ubuntu 11736 9298 0 16:45 pts/1 00:00:00 grep --color=auto agent
root 12059 1188 0 Apr07 ? 00:00:20 /usr/local/sa/agent/plugins/sap1004
root 12117 1 0 Apr07 ? 00:10:32 /usr/local/sa/agent/plugins/sap1005
使用我的命令获取后,则是
ubuntu@VM-7-212-ubuntu:/lib/modules/4.4.0-53-generic$ ps -ef | grep agent | grep -v grep | awk '{print $2}'
1185
1188
1256
1271
1272
12059
12117
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。