Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[深入理解Linux进程] ps、pstree 命令 #12

Open
codetalks-new opened this issue Apr 7, 2019 · 1 comment
Open

[深入理解Linux进程] ps、pstree 命令 #12

codetalks-new opened this issue Apr 7, 2019 · 1 comment

Comments

@codetalks-new
Copy link
Owner

关于 procps

ps,pstree,top 等一系列命令,都是来自 procps 工具包。
主要包含如下命令。

  • free - 显示已用及剩余内存。
  • kill - 基于 PID 给进程发送信号。
  • pkill - 基于 进程名及其他属性给进程发送信号。
  • ps 列出进程信息。
  • pgrep 基于进程名及其他属性列出进程
  • pmap 列出进程的内存映射关系。
  • pwdx 列出进程的当前目录。
  • slabtop 实时显示内核的 slab 缓存信息
  • snice 调整进程的 nice 值。
  • sysctl 运行时读写内核参数。
  • tload 图形化显示当前系统负载。
  • top 动态实时显示当前运行进程。
  • uptime 显示系统已经运行时长。
  • vmstat 列出虚拟内存统计。
  • w 报告当前登录用户及当前正在做什么。
  • watch 重复执行程序,全屏显示。

ps 命令使用帮助

ps 命令兼容三种不同风格的命令选项。

  1. Unix98 选项。这类选项可以合并指定,而且前面必须前置破折号。
  2. BSD选项。区别于上面是前面不能 加破折号。
  3. GNU长选项。前面必须前置两个破折号。

ps的使用帮助分为了6节。参考如下:

 Try 'ps --help <simple|list|output|threads|misc|all>'
  or 'ps --help <s|l|o|t|m|a>'
 for additional help text.

下面的实例也将以此分组进行实践。

常用命令选项

ps --help simple
下面提取的会话领导进程指的是比如 shell 进程一般就是会话领导进程。通过此 shell 创建的进程都属于此会话。

  • -A,-e 列出所有进程
  • -a 列出所有带 tty 的进程,不包含会话领导。
  • a 列出所有带 tty 的进程,包含其他用户的。
  • -d 所有非会话领导的进程。
  • -N,--deselect 反选
  • r 只显示正在运行的进程。
  • T 只显示在此终端的进程。
  • x 只显示没有控制终端的进程。一般用于列出守护进程及没有从终端启动的进程。

列表筛选选项

ps --help list

  • -C <command> 以完整的进程名过滤。
  • -G,--Group <gid> 根据真实组ID或组名过滤。(提示:/etc/group包含了所有组定义相关信息。)
  • -g,--group <group> 会话或有效组名
  • -p,p,--pid <PID> 进程ID
  • --ppid <PID 父进程ID
  • -q,q --quick-pid <PID> 进程ID (快速模式)
  • -s,--sid <session> 会话ID
  • -t,t --tty <tty> 终端
  • -u,U, --user <UID> 有效用户名或ID
  • -U,--User <UID> 真实用户名或ID

以上筛选项基本支持。以逗号,或以空格分隔的多个参数。
例如:
ps -u root,nobody ps -p 1 2 3

输出控制

ps --help output

  • -f full-format,包含命令行。
UID        PID  PPID  C STIME TTY          TIME CMD
ubuntu   16225     1  0 08:23 ?        00:00:00 /lib/systemd/systemd --user
  • -F extra full,更多输出。
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
ubuntu   16225     1  0 11312  4696   0 08:23 ?        00:00:00 /lib/systemd/systemd --user

-H,f, --forest 继承树,及树状视图。

ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu f
  PID TTY      STAT   TIME COMMAND
16975 ?        S      0:00 sshd: ubuntu@pts/1
16976 pts/1    Ss     0:00  \_ -bash
20057 pts/1    R+     0:00      \_ ps -u ubuntu f
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu -H
  PID TTY          TIME CMD
16975 ?        00:00:00 sshd
16976 pts/1    00:00:00   bash
20066 pts/1    00:00:00     ps
ubuntu@VM-0-3-ubuntu:~$
  • -j,j 任务格式,BSD 控制任务格式。
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu j
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    1 16225 16225 16225 ?           -1 Ss     500   0:00 /lib/systemd/systemd --user
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu -j
  PID  PGID   SID TTY          TIME CMD
16225 16225 16225 ?        00:00:00 systemd
  • -l,l 长格式,及BSD长格式
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4   500 16225     1  20   0  45248  4696 ep_pol Ss   ?          0:00 /lib/systemd/systemd --u
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500 16225     1  0  80   0 - 11312 ep_pol ?        00:00:00 systemd
  • -M,Z 添加安全数据(for SELinux)
LABEL                             PID TTY          TIME CMD
unconfined                      16225 ?        00:00:00 systemd
  • s 信号格式
  UID   PID   PENDING   BLOCKED   IGNORED    CAUGHT STAT TTY        TIME COMMAND
  500 16225  00000000 <28014a03  00001000 <80000000 Ss   ?          0:00 /lib/systemd/systemd
  • u 面向用户格式
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu   16225  0.0  0.5  45248  4696 ?        Ss   08:23   0:00 /lib/systemd/systemd --user
  • v 虚拟内存格式。
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
16225 ?        Ss     0:00      0  1391 43856  4696  0.5 /lib/systemd/systemd --user
  • X 寄存器格式
  PID   STACKP      ESP      EIP TMOUT ALARM STAT TTY        TIME COMMAND
16225 efe876a0 efe869b8 b85899f3     -     - Ss   ?          0:00 /lib/systemd/systemd --user
  • e 显示环境变量
ubuntu@VM-0-3-ubuntu:~$ ps  -u ubuntu u e
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ubuntu   16225  0.0  0.5  45248  4696 ?        Ss   08:23   0:00 /lib/systemd/systemd --user LANG=en_US.utf8 PATH=/

-- --no-headers 不要表头。
-- --headers 每页显示表头
-- --cols,--columns,-- width <num> 设定屏幕宽度
-- --rows,--lines <num> 设定屏幕高度。

线程相关

H 把线程当进程显示
-L 显示 LWP,NLWP 列。
-m,m 在进程之后显示
-T 显示 SPID 列。

其他

-c-l 参数配置显示调度类
c 显示真值进程名
k,--sort 指定排序列,多个列可以使用逗号分隔.语法 [+|-]key,[+|-]key,... ,其中 + 表示升序,- 表示降序。

L 显示所有的列标签。
n 显示数字形式 uidwchan
S,--cumulative 累加模式,显示已死亡的子进程。
-w,w 不限制输出宽度。
-y 只能跟 -l 搭配,表示不显示 flags 但是显示 rss
-V,V, --version 显示 版本。

@codetalks-new
Copy link
Owner Author

术语解释

基本术语参考 top 命令说明。

进程标志 (F) 列,输出标记 flags

  • 1 forked but didn't exec (表示其实跟父进程运行的是同一个程序,因为还没有加载自己的程序镜像)
  • 4 used super-user privileges

进程状态码 (STAT,S) 列,输出标记 s,stat,state

  • D 不可中断休眠中(一般是IO)
  • R 运行中,或者等待运行中
  • S 可中断休眠中,(等待某一个事件完成)
  • T 被任务控制信号停止
  • t 在 tracing 时被调试器中止
  • W paging (2.6 之后被废弃)
  • X dead
  • Z defunct ("zombie") 僵尸进程,已终止但是父进程没有清理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant