三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何通过命令行查询Linux系统中目标进程的线程信息并导出为html文件?

美国、香港服务器

如何通过命令行查询Linux系统中目标进程的线程信息并导出为html文件?

10-29   来源:

 要通过命令行查询 Linux 系统中目标进程的线程信息并导出为 HTML 文件,需要结合线程信息查询工具(如ps、top、pstack)和文本转 HTML 工具(如awk、sed或htmlize),将原始文本信息格式化为 HTML 结构。以下是具体实现方法,兼顾自动化和可读性:

核心思路
获取线程信息:用ps、top、pstack等命令提取目标进程的线程 ID、CPU / 内存占用、状态、调用栈等信息,保存为临时文本。
格式化 HTML:通过脚本(bash+awk)将文本信息转换为 HTML 表格或结构化页面,添加标题、样式和分页,提升可读性。
导出文件:将格式化后的内容输出为.html文件,可直接用浏览器打开查看。
方法:通过自定义脚本生成 HTML 报告
以下是一个自动化脚本,整合线程基础信息、资源占用、调用栈,并生成带样式的 HTML 文件。
步骤 1:创建脚本(thread2html.sh)
bash
#!/bin/bash
 
# 检查参数(目标进程PID)
if [ $# -ne 1 ]; then
    echo "用法:$0 <进程PID>"
    exit 1
fi
PID=$1
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
OUTPUT_HTML="thread_info_${PID}_${TIMESTAMP}.html"
 
# 临时文件存储原始线程信息
TMP_PS=$(mktemp)
TMP_TOP=$(mktemp)
TMP_PSTACK=$(mktemp)
 
# 1. 获取线程基础信息(ps命令)
echo "获取线程基础信息..."
ps -T -p $PID -o pid,spid,%cpu,%mem,time,state,cmd > $TMP_PS 2>/dev/null
 
# 2. 获取线程实时资源占用(top命令,1次采样)
echo "获取线程资源占用..."
top -b -H -p $PID -n 1 > $TMP_TOP 2>/dev/null
 
# 3. 获取线程调用栈(pstack,若已安装)
echo "获取线程调用栈..."
if command -v pstack &>/dev/null; then
    pstack $PID > $TMP_PSTACK 2>/dev/null
else
    echo "pstack未安装,跳过调用栈获取" > $TMP_PSTACK
fi
 
# 生成HTML文件
echo "生成HTML报告..."
cat << EOF > $OUTPUT_HTML
   
    进程$PID的线程信息报告
   
   

进程$PID的线程信息报告

   

生成时间:$(date +"%Y-%m-%d %H:%M:%S")

 
   
   
       

1. 线程基础信息(PID/TID/CPU/状态)

       
           
               
               
               
               
               
               
               
           
EOF
 
# 用awk处理ps输出,转换为HTML表格行(跳过表头)
awk "NR>1 {
    printf "           
\n"
    printf "               
\n", $1  # PID
    printf "               
\n", $2  # TID
    printf "               
\n", $3  # %CPU
    printf "               
\n", $4  # %MEM
    printf "               
\n", $5  # TIME
    printf "               
\n", $6  # STATE
    # 合并剩余字段作为命令(处理含空格的命令)
    cmd = ""
    for(i=7; i<=NF; i++) cmd = cmd " " $i
    printf "               
\n", cmd
    printf "           
\n"
}" $TMP_PS >> $OUTPUT_HTML
 
cat << EOF >> $OUTPUT_HTML
       
进程ID(PID) 线程ID(TID) CPU使用率(%) 内存使用率(%) 累计CPU时间 线程状态 命令
%s %s %s %s %s %s %s
   
 
   
   
       

2. 线程实时资源占用(CPU/内存)

       
$(cat $TMP_TOP)
       
   
 
   
   
       

3. 线程调用栈信息

       
$(cat $TMP_PSTACK)
       
   
EOF
 
# 清理临时文件
rm -f $TMP_PS $TMP_TOP $TMP_PSTACK
 
echo "HTML报告生成完成:$(pwd)/$OUTPUT_HTML"
步骤 2:脚本功能说明
参数输入:接收目标进程的 PID 作为参数(如./thread2html.sh 1234)。
信息采集:
用ps -T获取线程基础信息(PID、TID、CPU / 内存使用率、状态等)。
用top -b -H获取线程实时资源占用(批量模式,非交互)。
用pstack获取线程调用栈(若已安装)。
HTML 生成:
定义 CSS 样式,使表格和文本更易读(交替行颜色、边框、标题样式)。
将ps输出转换为 HTML 表格,top和pstack输出保留原始格式(用
标签)。
文件名包含 PID 和时间戳(如thread_info_1234_20241027_193000.html)。
步骤 3:执行脚本并查看结果
给脚本执行权限:
bash
chmod +x thread2html.sh
运行脚本(替换1234为目标进程 PID):
bash
sudo ./thread2html.sh 1234  # 用sudo确保权限充足
查看 HTML 文件:
脚本执行成功后,会输出文件路径(如./thread_info_1234_20241027_193000.html)。
用浏览器打开该文件,即可看到格式化的线程信息(表格 + 原始输出)。
关键优化与扩展
样式美化:可修改脚本中的