进程相关命令。
1. 进程状态ps
命令ps
(process status),如ps –aux
,
a
显示当行终端机下的所有程序,包括其他用户的程序u
以用户为主的格式来显示程序状况x
显示所有程序,不以终端机来区分
举例,
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 170316 13000 ? Ss Mar22 2:24 /lib/systemd/systemd --system --deserialize 35
root 2 0.0 0.0 0 0 ? S Mar22 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Mar22 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Mar22 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Mar22 0:00 [kworker/0:0H-kblockd]
root 9 0.0 0.0 0 0 ? I< Mar22 0:00 [mm_percpu_wq]
root 10 0.0 0.0 0 0 ? S Mar22 0:05 [ksoftirqd/0]
root 11 0.0 0.0 0 0 ? I Mar22 23:40 [rcu_sched]
root 12 0.0 0.0 0 0 ? S Mar22 0:22 [migration/0]
root 13 0.0 0.0 0 0 ? S Mar22 0:00 [idle_inject/0]
root 14 0.0 0.0 0 0 ? S Mar22 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S Mar22 0:00 [cpuhp/1]
root 16 0.0 0.0 0 0 ? S Mar22 0:00 [idle_inject/1]
root 17 0.0 0.0 0 0 ? S Mar22 0:21 [migration/1]
root 18 0.0 0.0 0 0 ? S Mar22 0:03 [ksoftirqd/1]
root 20 0.0 0.0 0 0 ? I< Mar22 0:00 [kworker/1:0H-events_highpri]
root 21 0.0 0.0 0 0 ? S Mar22 0:00 [cpuhp/2]
root 22 0.0 0.0 0 0 ? S Mar22 0:00 [idle_inject/2]
root 23 0.0 0.0 0 0 ? S Mar22 0:21 [migration/2]
root 24 0.0 0.0 0 0 ? S Mar22 0:03 [ksoftirqd/2]
root 26 0.0 0.0 0 0 ? I< Mar22 0:00 [kworker/2:0H-kblockd]
root 27 0.0 0.0 0 0 ? S Mar22 0:00 [cpuhp/3]
root 28 0.0 0.0 0 0 ? S Mar22 0:00 [idle_inject/3]
root 29 0.0 0.0 0 0 ? S Mar22 0:21 [migration/3]
root 30 0.0 0.0 0 0 ? S Mar22 0:03 [ksoftirqd/3]
root 32 0.0 0.0 0 0 ? I< Mar22 0:00 [kworker/3:0H-events_highpri]
root 33 0.0 0.0 0 0 ? S Mar22 0:00 [cpuhp/4]
...
各项结果含义如下:
- USER: 进程拥有者
- PID: pid
- %CPU: 占用的 CPU 使用率
- %MEM: 占用的内存使用率
- VSZ: 占用的虚拟内存大小
- RSS: 占用的内存大小
- TTY: 终端的次要装置号码
- START: 行程开始时间
- TIME: 执行的时间
- COMMAND:所执行的指令
- STAT: 该行程的状态,Linux的进程有5种状态:
- D 不可中断 uninterruptible sleep (usually IO)
- R 运行 runnable (on run queue)
- S 中断 sleeping
- T 停止 traced or stopped
- Z 僵死 defunct (zombie) process
- 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
2. top
top
命令动态显示运行中的进程及其资源占用情况。top
命令使用方法如下:
top -hv|-bcEHiOSs1 -d secs -n max -u|U user -p pid -o fld -w [cols]
- d:指定更新的间隔,以秒计算
- q:没有任何延迟的更新
- c:显示进程完整的路径与名称
- S:累积模式,会将己完成或消失的子行程的CPU时间累积起来
- s:安全模式
- i:不显示任何闲置(Idle)或无用(Zombie)的行程
- n:显示更新的次数,完成后将会退出top
举例如下:
# top
top - 20:17:08 up 48 days, 2:58, 61 users, load average: 0.20, 0.26, 0.31
Tasks: 611 total, 1 running, 577 sleeping, 6 stopped, 27 zombie
%Cpu(s): 0.9 us, 0.4 sy, 0.0 ni, 98.6 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 7701.1 total, 745.7 free, 2937.8 used, 4017.6 buff/cache
MiB Swap: 4096.0 total, 4084.0 free, 12.0 used. 4465.5 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3718638 u202121+ 20 0 2326476 31160 12240 S 5.6 0.4 0:07.44 vim
3718646 u202121+ 20 0 527892 73116 46344 S 2.3 0.9 0:02.99 python3
3714058 u202121+ 20 0 2326600 32560 12448 S 2.0 0.4 0:11.30 vim
3714063 u202121+ 20 0 528032 73532 46524 S 0.7 0.9 0:04.24 python3
11 root 20 0 0 0 0 I 0.3 0.0 16:15.94 rcu_sched
424 root 20 0 0 0 0 S 0.3 0.0 1:52.90 jbd2/dm-0-8
2854800 u202121+ 20 0 1256924 87572 33560 S 0.3 1.1 1:21.55 node
2866993 u202121+ 20 0 1019480 160492 38452 S 0.3 2.0 3:41.54 node
3707543 u202121+ 20 0 2326636 31520 12520 S 0.3 0.4 0:09.03 vim
3707555 u202121+ 20 0 528156 72668 45248 S 0.3 0.9 0:02.82 python3
3710188 u202121+ 20 0 14064 5964 4484 S 0.3 0.1 0:00.29 sshd
3718785 u202121+ 20 0 14064 6000 4520 S 0.3 0.1 0:00.07 sshd
3719355 u202121+ 20 0 2325792 30752 12568 S 0.3 0.4 0:00.92 vim
3721450 u202121+ 20 0 14064 5856 4388 S 0.3 0.1 0:00.03 sshd
3722435 root 20 0 9800 4556 3248 R 0.3 0.1 0:00.14 top
1 root 20 0 170316 13000 7496 S 0.0 0.2 1:51.65 systemd
上述输出结果,
第一行:当前时间、系统启动时间、当前系统登录用户数目、平均负载
第二行:进程情况
- 进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数
第三行:CPU状态
- 用户占用、系统占用、优先进程占用、闲置进程占用。
第四行:内存状态
- 平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存
- 第五行:交换状态
- 平均可用交换容量、已用容量、闲置容量、高速缓存容量
各列含义如下:
- PRI,优先级
- NI : nice值。负值表示高优先级,正值表示低优先级
- RES(Memory usage):—该进程占用的物理内存的总数量,单位是KB
S
表示进程状态- D = uninterruptible sleep,不可中断的睡眠状态
- I = idle
- R = running
- S = sleeping
- T = stopped by job control signal
- t = stopped by debugger during trace
- Z = zombie,僵尸进程
3. 打印进程树pstree
命令pstree
打印进程树,举例如下:
~# pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
├─atd
├─4*[bash]
├─bash───vi─┬─python3───2*[{python3}]
│ └─31*[{vi}]
├─9*[client]
├─cpptools-srv───19*[{cpptools-srv}]
├─cron
├─dbus-daemon
├─irqbalance───{irqbalance}
├─login───bash
├─multipathd───6*[{multipathd}]
├─networkd-dispat
├─polkitd───2*[{polkitd}]
├─rsyslogd───3*[{rsyslogd}]
├─screen───bash───sh───frpc───14*[{frpc}]
├─6*[server───server]
├─27*[server]
├─snapd───25*[{snapd}]
├─sshd─┬─sshd───sshd───bash───bash───sh───node─┬─node───10*[{node}]
│ │ ├─node─┬─clangd.main───9*[{clangd.main}]
│ │ │ └─11*[{node}]
│ │ ├─node───12*[{node}]
│ │ └─10*[{node}]
│ ├─6*[sshd───sshd───bash]
│ ├─sshd───sshd───bash───server
│ ├─sshd───sshd───bash───client───2*[{client}]
│ ├─sshd───sshd───bash───vim─┬─python3───2*[{python3}]
│ │ └─28*[{vim}]
│ ├─sshd───sshd───bash─┬─sh───node─┬─node───10*[{node}]
│ │ │ ├─node─┬─cpptools───21*[{cpptools}]
│ │ │ │ ├─node───6*[{node}]
│ │ │ │ └─11*[{node}]
│ │ │ ├─node───12*[{node}]
│ │ │ └─10*[{node}]
│ │ └─sleep
│ ├─5*[sshd───sshd───bash───vim─┬─python3───2*[{python3}]]
│ │ └─31*[{vim}]]
│ ├─sshd───sshd───bash───vim─┬─python3───2*[{python3}]
│ │ └─21*[{vim}]
│ ├─sshd───sshd───bash───vim─┬─bash───sudo
│ │ ├─python3───2*[{python3}]
│ │ └─31*[{vim}]
│ ├─sshd───sshd───bash─┬─vim─┬─python3───2*[{python3}]
│ │ │ └─15*[{vim}]
│ │ └─vim─┬─python3───2*[{python3}]
│ │ └─31*[{vim}]
│ ├─sshd───bash
│ ├─sshd───sshd───sftp-server
│ ├─sshd───bash───pstree
│ ├─sshd───sshd───bash───vim─┬─python3───2*[{python3}]
│ │ └─13*[{vim}]
│ └─sshd───sshd───bash───vim─┬─python3───2*[{python3}]
│ └─10*[{vim}]
├─18*[systemd───(sd-pam)]
├─systemd-journal
├─systemd-logind
├─systemd-network
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd───systemd-udevd
├─thermald───{thermald}
├─tmux: server───4*[bash]
├─udisksd───4*[{udisksd}]
├─unattended-upgr───{unattended-upgr}
└─upowerd───2*[{upowerd}]
打印某个进程的进程树,在pstree
后面加上pid
(参数-p
是为了输出结果显示进程ID),举例,
# pstree -p 2003190
fork_two_childr(2003190)─┬─fork_two_childr(2003191)
└─fork_two_childr(2003192)
4. 打印进程的统计信息
命令prtstat
打印某个进程的统计信息,使用方法如下:
prtstat [-r|--raw] pid
举例,
# prtstat 2067445
Process: fork_two_childr State: S (sleeping)
CPU#: 3 TTY: 136:47 Threads: 1
Process, Group and Session IDs
Process ID: 2067445 Parent ID: 2003036
Group ID: 2067445 Session ID: 2003036
T Group ID: 2067445
Page Faults
This Process (minor major): 82 0
Child Processes (minor major): 0 0
CPU Times
This Process (user system guest blkio): 0.00 0.00 0.00 0.00
Child processes (user system guest): 0.00 0.00 0.00
Memory
Vsize: 2547 kB
RSS: 589 kB RSS Limit: 18446744073709 MB
Code Start: 0x558f13e9a000 Code Stop: 0x558f13e9b355
Stack Start: 0x7fff4f320ae0
Stack Pointer (ESP): 0 Inst Pointer (EIP): 0
Scheduling
Policy: normal
Nice: 0 RT Priority: 0 (non RT)
# prtstat -r 2067445
pid: 2067445 comm: fork_two_childr
state: S ppid: 2003036
pgrp: 2067445 session: 2003036
tty_nr: 34863 tpgid: 2067445
flags: 40400000 minflt: 82
cminflt: 0 majflt: 0
cmajflt: 0 utime: 0
stime: 0 cutime: 0
cstime: 0 priority: 20
nice: 0 num_threads: 1
itrealvalue: 0 starttime: 541288898
vsize: 2547712 rss: 144
rsslim: 18446744073709551615 startcode: 94073002762240
endcode: 94073002767189 startstack: 140734522067680
kstkesp: 0 kstkeip: 0
wchan: 1 nswap: 0
cnswap: 1 exit_signal: 17
processor: 3 rt_priority: 0
policy: 0 delayaccr_blkio_ticks: 0
guest_time: 0 cguest_time: 0
5. kill
kill
命令向进程发送信号或者杀死进程(实为发送信号SIGKILL
),加上参数-9
(kill -9 pid
表示强行终止进程。
系统已经定义的信号列表如下:
# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
6. 优先级
命令nice
修改进程的优先级并运行,优先级取值,从最高-20
到最低19
,默认为0。举例:
nice -n -5 /usr/local/mysql/bin/mysqld_safe
命令renice
修改正在运行进程的优先级,举例:
renice -5 -p 5200