Linux ps查看进程状态及进程死锁问题的查看

来源:互联网 发布:二维编程雕刻机 编辑:程序博客网 时间:2024/05/20 05:53

通常我们通过

ps aux | grep [pthread]

查看特定进程[pthread]的状态信息;

在Linux中,可能状态如下:

    D    不可中断     Uninterruptible sleep (usually IO)
    R    正在运行,或在队列中的进程
    S    处于休眠状态
    T    停止或被追踪
    Z    僵尸进程
    W    进入内存交换(从内核2.6开始无效)
    X    死掉的进程
    <    高优先级
    N    低优先级
    L    有些页被锁进内存
    s    包含子进程
    +    位于后台的进程组
    l    多线程,克隆线程

例如:

USERPID%CPU%MEMVSZRSS TTY      STAT START   TIME COMMANDtss 20629  1.1  0.0  94732  1660 pts/1    Sl+  18:03   0:08 /usr/local/sbin/tcsd -f

USER: 行程拥有者 

PID: pid
%CPU: 占用的 CPU 使用率 
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令 


Linux下查看某个进程的线程数量
1.根据进程号进行查询:
# pstree -p 进程号
# top -Hp 进程号
2.根据进程名字进行查询:
# pstree -p `ps -e | grep server | awk '{print $1}'`
# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l


Linux死锁问题
使用 pstack 和 gdb 工具对死锁程序进行分析
pstack 进程号 查看各个线程的堆栈信息
当进程吊死的时候,多次使用,死锁的线程将一直处于等锁的状态,确定某些线程一直没有变化,一直处于等锁的状态。那么这些线程很可能是死锁了。如果怀疑哪些线程发生死锁了,可以采用gdb 进一步attach线程并进行分析。
执行命令 gdb attach 9368(进程号) 进入gdb调试终端
运行:(gdb) info thread


获取锁和释放锁的位置前后分别添加日志输出,从而判断释放是死锁的问题;