目录
//实时记录指定进程状态 [wz@192 ~]$ while :; do echo "###########"; ps axj | head -1 && ps axj | grep target | grep -v grep; echo "#########"; sleep 1; done
一,查看进程命令
ps、top、pstree、grep;
1,ps 命令
静态查看进程信息,可接受多种选项;
- UNIX选项,需加破折号(-);
- BSD选项,不需加破折号(-);
- GNU长选项,需加两个破折号(-);
选项
- a,取消BSD风格的“仅你自己”限制,列出所有使用终端tty的进程;与选项x一起将列出所有进程;
- x,取消BSD风格的“需有tty”限制,列出所有仅自己的进程;
- j,BSD作业控制格式,增加了如PPID等信息;
- u,显示面向用户的格式,显示如USER、%CPU、%MEM等信息;
- l,BSD长格式显示,显示如F、UID、PID、PPID、PRI等;
- -l,长格式,常与-y一起使用,显示如F、S、UID、PID、PPID、C等;
- -A、-e,列出所有进程;
- -a,列出所有进程,除了 session leaders 和关联终端的进程;
- -d,列出所有进程,除了 session leaders ;
- p、-p、--pid,选择指定PID的进程;
- --ppid,选择指定PID的父进程;
- U、-u、--user,选择用户RUID或名字的进程;
ps axj
[wz@192 ~]$ ps axj | head -1 && ps axj | grep bash
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
1 786 775 775 ? -1 S 0 0:00 /bin/bash /usr/sbin/ksmtuned
2095 2231 2231 2231 ? -1 Ss 1000 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
2848 2856 2856 2856 pts/0 2937 Ss 1000 0:00 bash
2848 3086 3086 3086 pts/1 4838 Ss 1000 0:00 bash
3086 4839 4838 3086 pts/1 4838 S+ 1000 0:00 grep --color=auto bash
ps aux
[wz@192 ~]$ ps aux | head -1 && ps aux | grep bash
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 786 0.0 0.0 115408 952 ? S 07:27 0:00 /bin/bash /usr/sbin/ksmtuned
wz 2231 0.0 0.0 72472 776 ? Ss 07:28 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"
wz 2856 0.0 0.1 116860 3300 pts/0 Ss 07:28 0:00 bash
wz 3086 0.0 0.1 116860 3416 pts/1 Ss 07:37 0:00 bash
wz 4849 0.0 0.0 112816 1012 pts/1 S+ 08:59 0:00 grep --color=auto bash
- USER,进程的用户;
- PID,该进程标识符;
- %CPU,该进程占用CPU的百分比;
- %MEM,该进程占用内存的百分比;
- VSZ,该进程使用虚拟内存量KB;
- RSS,该进程使用的物理内存量KB;
- TTY,启动该进程的终端设备,非终端启动显示?;
- STAT,该进程状态,如R、S、D、T、Z;
- START,该进程启动时间;
- TIME,该进程累计cpu时间;
- COMMAND,该进程启动命令;
ps l
[wz@192 ~]$ ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
0 1000 2856 2848 20 0 116860 3300 do_wai Ss pts/0 0:00 bash
0 1000 2937 2856 20 0 119848 2376 do_wai S+ pts/0 0:00 man ps
0 1000 2950 2937 20 0 110408 928 n_tty_ S+ pts/0 0:00 less -s
0 1000 3086 2848 20 0 116860 3420 do_wai Ss pts/1 0:00 bash
0 1000 5035 3086 20 0 153324 1532 - R+ pts/1 0:00 ps l
ps -l
[wz@192 ~]$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 3086 2848 0 80 0 - 29215 do_wai pts/1 00:00:00 bash
0 R 1000 5051 3086 0 80 0 - 38331 - pts/1 00:00:00 ps
- F,该进程标志,说明进程权限;
- 1,仅可复制,不可执行;
- 4,进程权限为root;
- S,该进程状态,如R、S、D、T、Z;
- UID,该进程执行者;
- PID,该进程标识符;
- PPID,该进程父进程标识符;
- C,CPU的使用率;
- PRI,该进程优先级,值越小优先级越高;
- NI,该进程nice值;
- ADDR,该进程的内存地址;
- SZ,该进程交换空间大小;
- WCHAN,显示休眠进程的系统函数名;
- TTY,启动该进程的终端设备,非终端启动显示?;
- TIME,该进程累计cpu时间;
- CMD,该进程启动命令;
2,top 命令
动态实时查看进程信息;
按键
- P,根据CPU使用百分比排序;
- M,根据物理内存大小排序;
- N,根据启动时间排序;
- c,切换显示命令名称和完整命令行;
- h,获得top进程在线帮助信息;
- k,根据提示输入进程PID,并按Enter终止对应进程;
- 1,显示CPU个数和状态;
3,ptree 命令
以树形结构查看进程数;
- -a,显示命令行参数;
- -u,显示用户名;
- -p,显示PID;
[wz@192 ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
[wz@192 ~]$ pstree -aup
systemd,1 --switched-root --system --deserialize 22
├─ModemManager,682
│ ├─{ModemManager},697
│ └─{ModemManager},757
├─NetworkManager,840 --no-daemon
│ ├─dhclient,971 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
│ ├─{NetworkManager},846
│ └─{NetworkManager},849
4,pgrep 命令
基于名称和其他属性,来查询或显示进程;
- -l,显示进程名字及PID;
- -a,显示完整的命令行及PID;
- -u,匹配用户ID的进程;
- -n,仅显示最新进程的PID;
- -o,仅显示最老进程的PID;
- -t,显示匹配终端的进程PID;
[wz@192 ~]$ pgrep -l bash
2856 bash
3086 bash
[wz@192 ~]$ pgrep -l man
42222 man
[wz@192 ~]$ pgrep -a man
42222 man pgrep
[wz@192 ~]$ pgrep -n bash
3086
[wz@192 ~]$ pgrep -o bash
2856
[wz@192 ~]$ pgrep -u 1000 -l
2090 gnome-keyring-d
2095 gnome-session-b
2104 dbus-launch
2105 dbus-daemon
2140 imsettings-daem
...
[wz@192 ~]$ pgrep -t pts/1,pts/0 -l
44435 bash
44489 bash
44547 man
44562 less
三,进程优先级
内核使用【0~139】数字来表示140种内部优先级,值越低优先级越高;
- 【0~99】专供实时进程使用;
- 【-20~19】Nice值映射到【100~139】;
- 优先级,即CPU分配资源的先后顺序;决定何时运行及接受CPU多长时间;
- 优先级高的优先执行,配置进程优先级对多任务环境有用,可改善系统性能;
PRI
- 表示进程优先级,即程序被CPU执行的先后顺序;
- 此值越小,级别越高;
NI
- 表示进程优先级的修正值;
- 调整进程优先级,在Linux下即调整进程NI值;
- NI值取值范围为-20~19;
- PRI(new) = PRI(old) + Nice;
在top中更改进程NI值
- 进入top(按“r”) -> 输入PID -> 输入NI值;
- 假如进程PRI为80,每次调整都是从80开始的;
- 输入调整的NI值会被钳制在-20~19自己;
相关概率:
- 竞争性,系统进程众多,CPU资源较少,进程间具有竞争性;优先级用于更合理竞争相关资源,从而有效完成任务;
- 独立性,多进程运行,需独立享受各种资源,运行期间互不干扰;
- 并行,多进程在多个CPU下分别同时运行;
- 并发,多进程在单个CPU下一段时间内切换运行;
注:OS调度器原则是公平且高效;