1. 查询运行中的进程 ps
- ps aux: 查询所有运行中的进程
➜ ~ ps aux (只展示部分)
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
_windowserver 230 11.4 0.5 7691192 44908 ?? Ss 24Jun20 329:26.96 /System/
root 296 6.7 1.0 5465444 87664 ?? Ss 24Jun20 28:38.35 /System/
qiushye 39630 5.9 1.9 9101816 160652 ?? S 12:03PM 0:57.58 /Applica
上述结果的列名含义如下:
USER:该 process 属于那个使用者账号的
PID :该 process 的号码
%CPU:该 process 使用掉的 CPU 资源百分比
%MEM:该 process 所占用的物理内存百分比
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的固定的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,主要的状态有
R :该程序目前正在运作,或者是可被运作
S :该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。
T :该程序目前正在侦测或者是停止了
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:该 process 被触发启动的时间
TIME :该 process 实际使用 CPU 运作的时间
COMMAND:该程序的实际指令
- ps aux | grep [str]: 查找匹配字符串[str]的进程
➜ ~ ps aux | grep 230 (这里查pid)
_windowserver 230 0.6 0.6 7741640 52828 ?? Rs 24Jun20 379:44.27 /System/Library/PrivateFrameworks/SkyLight.framework/Resources/WindowServer -daemon
_driverkit 15230 0.0 0.0 4799176 972 ?? Ss 10:07AM 0:00.02 /System/Library/DriverExtensions/AppleUserHIDDrivers.dext/AppleUserHIDDrivers com.apple.driverkit.AppleUserUSBHostHIDDevice0 0x10000a7f5
qiushye 32820 0.0 0.0 4286712 684 s002 S+ 12:13PM 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn 230
- ps -A (| head -4): 获取所有进程信息,| head -4 用于展示4行内容
➜ ~ ps -A | head -4
PID TTY TIME CMD
1 ?? 14:16.34 /sbin/launchd
107 ?? 0:21.43 /usr/sbin/syslogd
108 ?? 2:23.21 /usr/libexec/UserEventAgent (System)
- ps -ef (| head -4): 获取所有进程信息, -e等同于-A, -f 展示uid, pid等信息
➜ ~ ps -ef | head -4
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 24Jun20 ?? 14:16.64 /sbin/launchd
0 107 1 0 24Jun20 ?? 0:21.43 /usr/sbin/syslogd
0 108 1 0 24Jun20 ?? 2:23.21 /usr/libexec/UserEventAgent (System)
上述结果的列名含义如下:
UID 程序被该 UID 所拥有
PID 就是这个程序的 ID
PPID 则是其上级父程序的ID
C CPU 使用的资源百分比
STIME 日期信息
TTY 登入者的终端机位置
TIME 使用掉的 CPU 时间。
CMD 所下达的指令为何
- ps -u root: 获取root用户的进程信息
➜ ~ ps -u root
UID PID TTY TIME CMD
0 1 ?? 14:17.79 /sbin/launchd
0 107 ?? 0:21.46 /usr/sbin/syslogd
0 108 ?? 2:23.24 /usr/libexec/UserEventAgent (System)
0 111 ?? 0:11.97 /System/Library/PrivateFrameworks/Uninstall.framework/Res
- ps -o uid,pid,comm: 输出指定的进程字段,如uid, pid, comm(命令)
➜ ~ ps -o uid,pid,comm
UID PID COMM
501 33301 /bin/zsh
501 449 /Applications/iTerm.app/Contents/MacOS/iTerm2
501 466 -zsh
501 7057 /Applications/iTerm.app/Contents/MacOS/iTerm2
501 7061 -zsh
501 60798 /Applications/iTerm.app/Contents/MacOS/iTerm2
501 60801 -zsh
501 62294 mongo
2. 根据命令名称查询进程pgrep
- pgrep (-o/ -n/ -l) [process_name]: 匹配命令带有[process_name]的进程, -o表示最老的进程,-n表示最新的进程,-l展示PID和命令
➜ ~ pgrep iTerm2
449
6049
6075
57566
60798
➜ ~ pgrep -n "iTerm2"
60798
➜ ~ pgrep -o "iTerm2"
449
➜ ~ pgrep -l iTerm2
449 iTerm2
6049 iTerm2
6075 iTerm2
57566 iTerm2
60798 iTerm2
- pgrep -u [user] [process_name]: 匹配用户[uesr]下的命令带有[process_name]的进程
➜ ~ pgrep -u root iTerm2
➜ ~ pgrep -u qiushye iTerm2
449
6049
6075
57566
60798
- pgrep -f "process_name parameter": 匹配命令名为process_name且参数带parameter的进程
➜ ~ pgrep -lf "iTerm2 --launch_shell"
449 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server /usr/bin/login -fpl qiushye /Applications/iTerm.app/Contents/MacOS/iTerm2 --launch_shell
457 /usr/bin/login -fpl qiushye /Applications/iTerm.app/Contents/MacOS/iTerm2 --launch_shell
- pgrep -P [pid]: 输出父进程为[pid]的子进程号
➜ ~ pgrep -P 449
457
3. 查看实时运行的进程信息 top
- top: 查看所有进程信息,顶部展示了总体的进程信息,
Processes:进程和线程运行数量
Load Avg:系统的平均负载数,表示 1分钟、5分钟、15分钟到现在的平均数CPU usage表示cpu使用率
PhysMem: 物理内存使用情况
VM: 虚拟内存使用情况
Networks: 流入流出包情况
Disks: 磁盘读写情况
主体列表展示了各进程的信息,其中
PID 进程 id
COMMAND 命令
%CPU cup 占比
TIME 运行时间
#TH 线程数量
MEM 内存
CMPRS 表示属于您的进程的压缩数据的字节数(不是位)。
PPID 父进程id
Processes: 323 total, 2 running, 321 sleeping, 1916 threads 12:15:10
Load Avg: 3.97, 2.99, 2.62 CPU usage: 29.59% user, 27.44% sys, 42.95% idle
SharedLibs: 144M resident, 39M data, 12M linkedit.
MemRegions: 160012 total, 2000M resident, 38M private, 693M shared.
PhysMem: 7723M used (2434M wired), 468M unused.
VM: 1595G vsize, 1882M framework vsize, 469317134(64) swapins, 474197570(106491) swapouts
Networks: packets: 60304834/30G in, 44926219/7402M out.
Disks: 71819139/2541G read, 21626745/1976G written.
PID COMMAND %CPU TIME #TH #WQ #PORTS MEM PURG CMPRS PGRP PPID
54281 gopls 120.7 13:46.92 16 0 35 1320M 0B 447M- 350 54214
0 kernel_task 70.4 08:13:03 226/4 0 0 342M 0B 0B 0 0
351 iTerm2 12.5 44:24.07 8 3 382- 186M- 8128K 43M- 351 1
- top -o cpu -O +rsize -s 5 -n 20: 按cpu降序, 剩余存储升序排列,每5秒更新,展示20行。-o表示主排序,-O表示子排序, 排序的key包含pid, cpu, command, time, mem, uid等。
PID COMMAND %CPU TIME #TH #WQ #POR MEM PURG CMPR PGRP PPID STATE
667 bash 0.0 00:00.03 1 0 11 500K 0B 492K 667 1 sleeping
1355 ioupsd 0.0 00:00.01 1 0 24 516K 0B 512K 120 120 sleeping
- top -stats pid,command,cpu,th,pstate,time: 主体只展示进程号,命令,cpu占用,线程数,状态和运行时间
PID COMMAND %CPU #TH STATE TIME
351 iTerm2 13.3 10 sleeping 45:13.26
230 WindowServer 7.4 10 sleeping 09:10:05
166 hidd 4.9 6 sleeping 89:45.12
- top -user [user_name]:只展示属于[user_name]用户的进程
PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID
0 kernel_task 5.4 08:14:04 226/4 0 0 425M 0B 0B 0 0
57147 top 3.7 00:02.24 1/1 0 25 4124K 0B 0B 57147 7061
120 powerd 0.2 04:42.84 3 2 116 2276K 0B 1108K 120 1
4. 终止进程 kill
- kill (-n | signal) pid: 终止进程号为pid的进程, -n或signal表示设置的信号
kill -1 | HUP:终端断线
kill -2 | INT:中断进程,等同于ctrl+C
kill -3 | QUIT:退出进程,等同于ctrl+\
kill -9 | KILL: 强制立刻杀死进程
kill -15 | TERM: 终止进程 (默认信号),可以使得进程在退出之前清理并释放资源
kill -17 | STOP: 暂停进程
kill -19 | CONT: 继续进程
- kill -l : 输出所有可用的信号名称,具体对应数字从1开始叠加
➜ ~ kill -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2