pstack 安装linux_Linux下pstack的实现

pstack 安装linux_Linux下pstack的实现Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。Linux下这个工具叫做pstack.使用方法是#pstackUsage:pstack当然这个被调查的程序需要有符号信息。比较雷人的是这个程序竟然是个shell脚本,核心实现是gdb的threadapplyal…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。

Linux下这个工具叫做pstack. 使用方法是

# pstack

Usage: pstack

当然这个被调查的程序需要有符号信息。 比较雷人的是 这个程序竟然是个shell脚本,核心实现是gdb的 thread apply all bt, 我们可以观摩下他的实现,这个我们做类似的程序提供了一个很好的思路:

[root@=i ~]# cat `which pstack`

#!/bin/sh

if test $# -ne 1; then

echo “Usage: `basename $0 .sh` ” 1>&2

exit 1

fi

if test ! -r /proc/$1; then

echo “Process $1 not found.” 1>&2

exit 1

fi

# GDB doesn’t allow “thread apply all bt” when the process isn’t

# threaded; need to peek at the process to determine if that or the

# simpler “bt” should be used.

backtrace=”bt”

if test -d /proc/$1/task ; then

# Newer kernel; has a task/ directory.

if test `/bin/ls /proc/$1/task | /usr/bin/wc -l` -gt 1 2>/dev/null ; then

backtrace=”thread apply all bt”

fi

elif test -f /proc/$1/maps ; then

# Older kernel; go by it loading libpthread.

if /bin/grep -e libpthread /proc/$1/maps > /dev/null 2>&1 ; then

backtrace=”thread apply all bt”

fi

fi

GDB=${GDB:-/usr/bin/gdb}

if $GDB -nx –quiet –batch –readnever > /dev/null 2>&1; then

readnever=–readnever

else

readnever=

fi

# Run GDB, strip out unwanted noise.

$GDB –quiet $readnever -nx /proc/$1/exe $1

$backtrace

EOF

/bin/sed -n \

-e ‘s/^(gdb) //’ \

-e ‘/^#/p’ \

-e ‘/^Thread/p’

祝大家玩的开心。pstack 安装linux_Linux下pstack的实现

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193829.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 我刚刚做了一个艰难的决定「建议收藏」

    我刚刚做了一个艰难的决定「建议收藏」腾讯做了个艰难的决定,如果您电脑里安装了360软件,建议您卸载了它在运行QQ~可口可乐做出了一个非常艰难的决定,如果检测到用户胃里有百事可乐,将自动释放敌敌畏和鹤顶红中国移动做出一个非常艰难的决定,如果方圆百米内检测到有联通用户将使这些用户不间断自动拨打110迅雷做出一个非常艰难的决定,如果检测到用户电脑内安装快车,将拒绝下载教育片宝马做出了一个非常艰难的决定,如果检测到用户使用过奔驰宝马刹车将自动失灵蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺麦当劳做了个艰难的决定,如果监测

    2022年7月25日
    9
  • 让人“眼前一亮、不明觉厉”的互联网技术PPT「建议收藏」

    让人“眼前一亮、不明觉厉”的互联网技术PPT「建议收藏」为什么选择分享一起如此“鸡肋”的博文呢?我一直有个习惯:理论和实践,两手抓两手也要硬,最近一直搞技术,手里很多的新技术资料还未来得及消化,遂学习总结,加以分享。在做互联网产品功能介绍、互联网产品技术路线、技术人年度总结、互联网教育培训、互联网技术宣讲、技术人毕业答辩等场合时,可以参照以下PPT,让你思如泉涌,格调升级,瞬间征服观众~

    2022年6月1日
    43
  • C语言之如何输出uint32_t和uint64_t和16进制[通俗易懂]

    C语言之如何输出uint32_t和uint64_t和16进制[通俗易懂]1、输出uint32_tuint32_ta=888;printf(“ais%ld”,a);2、输出uint64_tuint64_tb=888;printf(“bis%lu”,b);printf(“bis%lld”,b);3、输出16进制intc=16;printf(“cis0x%08x”,c)

    2025年7月17日
    2
  • springboottest 红_解决没有@RunWith 和 @SpringBootTest注解或失效问题[通俗易懂]

    springboottest 红_解决没有@RunWith 和 @SpringBootTest注解或失效问题[通俗易懂]导入别人的项目或者自己想创建一个测试类经常会遇见了这个问题没有@RunWith和@SpringBootTest注解或失效网上搜了搜全是我下面的第一个解决方案第二个才是重点解决方案1添加依赖如果你是springboot项目pom文件中添加org.springframework.bootspring-boot-starter-testtestMaven项目在项目上右键B…

    2022年5月25日
    252
  • outputstreamwriter和filewriter_类文件解析

    outputstreamwriter和filewriter_类文件解析|–字符流(字符流=字节流+编码表。)|–字符输入流Reader——抽象类intread():一次读取一个字符intread(char[]chs):一次读取一…

    2025年10月28日
    4
  • 苹果手表使用|watchOS 7+自动化:Apple Watch使用方法

    苹果手表使用|watchOS 7+自动化:Apple Watch使用方法随着 AppleWatch 表现出越来越脱离 iPhone 附件的趋势 相信它在将来一定会作为独立的电子设备大放异彩 而在 AppleWatch 的使用过程中 有一个话题怎么也不会被绕开 就是表盘 我的 AppleWatch 使用方法也是基于主题表盘的打造和切换 在 watchOS7 到来后 这可以变得更简单 接下来我将以 AppleWatch 的一天 形式来为大家介绍 开始前 我把表盘图库推出的所有表盘简单地分成了两类 时尚类和实用类 时尚类表盘刻度盘由全屏幕改为圆盘反而牺牲了美观性 比如

    2025年7月21日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号