1.使用ps查询对应进程的进程号,以Java为例:ps -ef | grep java
2.使用gdb工具查询,前提是gdb工具已经安装:gdb --version查询版本号
3.使用命令 gdb -ex "set pagination 0" -ex "thread apply all bt" --batch -p [ 进程ID or 线程ID ] 打印出进程或线程信息,需要看懂源码
# -p : 指定attach到哪个进程或者线程中 # --batch : 使用批处理模式,在所有的命令执行完成后退出,正确返回0,错误为 非0 # --ex : 执行后面跟着的GDB命令 # set paginagtion 0: 不使用分页输出 # thread apply all bt : bt是backtrace的简写,即对所有线程使用backtrace命令, # bracktrace命令会产生一张表,包含当前的函数调用等信息
4.编写一个bash脚本,脚本内容如下,并授权执行权限,vim gdb_pidquery_bash.sh
#!/bin/bash
gdb -ex "set pagination 0" -ex "thread apply all bt" --batch -p $1 # $1 b表示该脚本的第一个参数
5.bash脚本执行 ./gdb_tid_print.sh 2495