linux进程的线程信息,Linux 下查询进程、线程信息

进程是怎样工作的

当系统启动的时候,内核先把一些它自己的活动初始化为进程,然后运行一个叫做 init 的程序。init, 依次地,再运行一系列的称为 init 脚本的 shell 脚本(位于/etc),它们可以启动所有的系统服务。 其中许多系统服务以守护(daemon)程序的形式实现,守护程序仅在后台运行,没有任何用户界面。 这样,即使我们没有登录系统,至少系统也在忙于执行一些例行事务。

在进程方案中,一个程序可以发动另一个程序被表述为一个父进程可以产生一个子进程。

内核维护每个进程的信息,以此来保持事情有序。例如,系统分配给每个进程一个数字,这个数字叫做 进程 ID 或 PID。PID 号按升序分配,init 进程的 PID 总是1。内核也对分配给每个进程的内存和就绪状态进行跟踪以便继续执行这个进程。 像文件一样,进程也有所有者和用户 ID,有效用户 ID,等等。

查看进程

查看进程,最常使用地命令是 ps。ps 程序有许多选项,它最简单地使用形式是这样的:webadmin@xuexiyuan:~$ ps

PID TTY     TIME     CMD

564 pts/0    00:00:00 bash

578 pts/0    00:00:00 ps

上例中,列出了两个进程,进程 564 和进程 578,各自代表命令 bash 和 ps。正如我们所看到的,默认情况下,ps 不会显示很多进程信息,只是列出与当前终端会话相关的进程。为了得到更多信息, 我们需要加上一些选项,但是在这样做之前,我们先看一下 ps 命令运行结果的其它字段。 TTY 是 “Teletype” 的简写,是指进程的控制终端。这里,Unix 展示它的年龄。TIME 字段表示 进程所消耗的 CPU 时间数量。正如我们所看到的,这两个进程使计算机工作起来很轻松。

如果给 ps 命令加上选项,我们可以得到更多关于系统运行状态的信息:webadmin@xuexiyuan:~$ ps x

PID TTY      STAT   TIME COMMAND

555 ?        S      0:00 sshd: webadmin@pts/0

564 pts/0    Ss     0:00 -bash

636 pts/0    R+     0:00 ps x

13452 ?        S      0:44 nginx: worker process

17296 ?        Sl   125:09 /opt/jdk1.8.0_151/jre/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.5.23/conf/logging.properties

18068 ?        Ss     0:00 /lib/systemd/systemd --user

18071 ?        S      0:00 (sd-pam)

加上 “x” 选项(注意没有开头的 “-“ 字符),告诉 ps 命令,展示所有进程,不管它们由什么 终端(如果有的话)控制。在 TTY 一栏中出现的 “?” ,表示没有控制终端。使用这个 “x” 选项,可以 看到我们所拥有的每个进程的信息。

输出结果中标题为 STAT 它揭示了进程当前状态,下表是对进程状态说明:

a35a34eddf41b6e4147420e497bfe6e5.png

另外一个常用选项组合是 “aux”(不带开头的”-“字符),能够显示属于每个用户的进程信息:webadmin@xuexiyuan:~$ ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.4  37792  4472 ?        Ss    2017   2:21 /lib/systemd/systemd --system --deserialize 18

root         2  0.0  0.0      0     0 ?        S     2017   0:00 [kthreadd]

root         3  0.0  0.0      0     0 ?        S     2017   0:14 [ksoftirqd/0]

root         5  0.0  0.0      0     0 ?        S

...

使用这个选项,可以唤醒 “BSD 风格” 的输出结果,下表是对命令列标题的说明:

d0062f8340047e80edba24c395d6adb0.png

用 top 命令动态查看进程

虽然 ps 命令能够展示许多计算机运行状态的信息,但是它只是提供 ps 命令执行时刻的机器状态快照。 为了看到更多动态的信息,我们使用 top 命令:webadmin@xuexiyuan:~$ top

top - 13:59:41 up 96 days, 16:30,  1 user,  load average: 0.00, 0.00, 0.00

Tasks: 114 total,   1 running, 113 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :  1016096 total,    88584 free,   685916 used,   241596 buff/cache

KiB Swap:        0 total,        0 free,        0 used.   133796 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND

17296 webadmin  20   0 2272184 371784   3404 S  0.3 36.6 125:11.52 java

30841 root      20   0   25980   2196   1584 S  0.3  0.2  35:22.76 AliYunDunUpdate

1 root      20   0   37792   4472   2624 S  0.0  0.4   2:21.17 systemd

2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd

3 root      20   0       0      0      0 S  0.0  0.0   0:14.62 ksoftirqd/0

5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H

top 程序以进程活动顺序显示连续更新的系统进程列表。(默认情况下,每三秒钟更新一次)。top 显示结果由两部分组成: 最上面是系统概要,下面是进程列表,以 CPU 的使用率排序。

其中系统概要包含许多有用信息。下表是对系统概要的说明:

0dbe21a8d5c9869b5accb00748f0bc14.png

top 程序接受一系列从键盘输入的命令。两个最有趣的命令是 h 和 q。h,显示程序的帮助屏幕; H,显示线程信息; q, 退出 top 程序。

查看进程的线程数使用ps、pstree命令查看指定进程的线程数:ps H  进程号 | wc -l

ps -T 进程号 | wc -l

pstree -p 进程号 | wc -l

ps命令,线程相关参数帮助文档:

0abc871f3f49adce51706d3ed82d7696.png使用top命令方式获取进程的线程数:top -Hp 进程号

6227a096b7d9c07eba63383173b39d8a.png通过 proc 伪文件系统方式查看进程的线程信息:cat /proc/进程号/status

0debdb81ac573b472f3e3303237b51cc.png

proc 伪文件系统,它驻留在 /proc 目录,这是最简单的方法来查看任何活动进程的线程数。 /proc 目录以可读文本文件形式输出,提供现有进程和系统硬件相关的信息如 CPU、中断、内存、磁盘等等.查看当前系统所有进程的线程总数ps axH | wc -l

ps -eT | wc -l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值