进程管理的常用命令
$ service
$ top
$ ps
$ pstree
$ lsof
$ chkconfig
$ kill
$ nice
$ renice
$ sleep
$ nohup
$ pgrep
$ killall
$ pkill
$ xkill
ps -eaf # 查看所有进程
kill -9 PID # 强制终止某个PID进程
kill -15 PID # 安全退出 需程序内部处理信号
cmd & # 命令后台运行
nohup cmd & # 后台运行不受shell退出影响
ctrl+z # 将前台放入后台(暂停)
jobs # 查看后台运行程序
bg 2 # 启动后台暂停进程
fg 2 # 调回后台进程
pstree # 进程树
vmstat 1 9 # 每隔一秒报告系统性能信息9次
sar # 查看cpu等状态
lsof file # 显示打开指定文件的所有进程
lsof -i:32768 # 查看端口的进程
renice +1 180 # 把180号进程的优先级加1
ps aux |grep -v USER | sort -nk +4 | tail # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu +3
ps
ps命令是Linux中最基础的查看系统进程的命令,能列出系统中运行的进程,包括进程号、CPU使用量、内存使用量等信息。
usage:
ps [选项]
选项:
-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
a:显示现行终端机下的所有程序,包括其他用户的程序。
-A:显示所有程序。
-c:显示CLS和PRI栏位。
c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。
-C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。
-d:显示所有程序,但不包括阶段作业领导者的程序。
-e:此选项的效果和指定"A"选项相同。
e:列出程序时,显示每个程序所使用的环境变量。
-f:显示UID,PPIP,C与STIME栏位。
f:用ASCII字符显示树状结构,表达程序间的相互关系。
-g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。
g:显示现行终端机下的所有程序,包括群组领导者的程序。
-G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。
h:不显示标题列。
-H:显示树状结构,表示程序间的相互关系。
-j或j:采用工作控制的格式显示程序状况。
-l或l:采用详细的格式来显示程序状况。
L:列出栏位的相关信息。
-m或m:显示所有的执行绪。
n:以数字来表示USER和WCHAN栏位。
-N:显示所有的程序,除了执行ps指令终端机下的程序之外。
-p<程序识别码>:指定程序识别码,并列出该程序的状况。
p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。
r:只列出现行终端机正在执行中的程序。
-s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。
s:采用程序信号的格式显示程序状况。
S:列出程序时,包括已中断的子程序资料。
-t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。
t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。
-T:显示现行终端机下的所有程序。
-u<用户识别码>:此选项的效果和指定"-U"选项相同。
u:以用户为主的格式来显示程序状况。
-U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。
U<用户名称>:列出属于该用户的程序的状况。
v:采用虚拟内存的格式显示程序状况。
-V或V:显示版本信息。
-w或w:采用宽阔的格式来显示程序状况。
x:显示所有程序,不以终端机来区分。
X:采用旧式的Linux i386登陆格式显示程序状况。
-y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。
-<程序识别码>:此选项的效果和指定"p"选项相同。
--cols<每列字符数>:设置每列的最大字符数。
--columns<每列字符数>:此选项的效果和指定"--cols"选项相同。
--cumulative:此选项的效果和指定"S"选项相同。
--deselect:此选项的效果和指定"-N"选项相同。
--forest:此选项的效果和指定"f"选项相同。
--headers:重复显示标题列。
--help:在线帮助。
--info:显示排错信息。
--lines<显示列数>:设置显示画面的列数。
--no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。
--group<群组名称>:此选项的效果和指定"-G"选项相同。
--Group<群组识别码>:此选项的效果和指定"-G"选项相同。
--pid<程序识别码>:此选项的效果和指定"-p"选项相同。
--rows<显示列数>:此选项的效果和指定"--lines"选项相同。
--sid<阶段作业>:此选项的效果和指定"-s"选项相同。
--tty<终端机编号>:此选项的效果和指定"-t"选项相同。
--user<用户名称>:此选项的效果和指定"-U"选项相同。
--User<用户识别码>:此选项的效果和指定"-U"选项相同。
--version:此选项的效果和指定"-V"选项相同。
--widty<每列字符数>:此选项的效果和指定"-cols"选项相同。
ps命令输出字段说明:
• USER:该 process 属于那个使用者账号的?
• PID :该 process 的号码。
• PPID :该 process的父进程的号码。
• %CPU:该 process 使用掉的 CPU 资源百分比;
• %MEM:该 process 所占用的物理内存百分比;
• VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
• RSS :该 process 占用的固定的内存量 (Kbytes)
• TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
• STAT:该程序目前的状态,主要的状态有:
o R :该程序目前正在运作,或者是可被运作;
o S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号 (signal) 唤醒。
o T :该程序目前正在侦测或者是停止了;
o Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
• START:该 process 被触发启动的时间;
• TIME :该 process 实际使用 CPU 运作的时间。
• COMMAND:该程序的实际指令为何?
实例:
$ ps //查看当前终端下启动的进程
PID TTY TIME CMD
1 ?? 0:09.48 /sbin/launchd
56 ?? 0:00.29 /usr/sbin/syslogd
$ ps aux // 查看所有的进程
ps aux | more
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
monsoon 497 14.2 6.7 6448572 558980 ?? S 11:06上午 6:22.40 /Applications/QQMusic.app/Contents/MacOS/QQMusic
$ ps -e | more
PID 进程ID
TTY与进程关联的终端
TIME 进程使用CPU累计时间
CMD 执行文件的名称
PID TTY TIME CMD
1 ?? 0:09.48 /sbin/launchd
56 ?? 0:00.29 /usr/sbin/syslogd
$ ps -ef | more
UID 用户ID
PPID 父进程的ID
UID PID PPID C STIME TTY TIME CMD
0 1 0 0 11:05上午 ?? 0:09.64 /sbin/launchd
0 56 1 0 11:06上午 ?? 0:00.29 /usr/sbin/syslogd
$ ps -axj //查看守护进程
$ ps -u root //查看root的进场
$ watch -n 1 'ps -aux --sort -pmem,-pcpu | head -10' //实时监测内存和cpu使用较高的前10个程序
top/htop
top是一个很有用的命令,可以监视系统中不同进程所使用的资源,它提供实时的系统状态信息,是一个综合了多方信息的监视工具,通过top命令所提供的交互式的解密,可以用热键管理。另外htop命令是加强版的top命令,但是在常用的发型版中没有默认按照,因此不做讨论。
usage: top [选项]
选项:
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
交互命令:
h:显示帮助画面,给出一些简短的命令总结说明;
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中。
实例:
$ top
# top -xxx 当前时间 up xx 系统运行时间 x users当前登录用户数
# load average 系统负载 即任务队列的平均长度 分别1分钟 5分钟 15分钟前到现在的平均值
top - 13:28:01 up 76 days, 16:09, 2 users, load average: 0.00, 0.01, 0.05
# 第二、三行为进程和CPU的信息,当有多个CPU时,这些内容可能会超过俩行
# total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数
# stoped 停止的进程数 zombie 僵尸进程数
Tasks: 85 total, 1 running, 84 sleeping, 0 stopped, 0 zombie
# CPU信息 多个CPU在数字键盘1 可以按照每个逻辑CPU的状况
# us 用户空间占用CPU百分比 sy内核空间占用CPU百分比 ni用户进场空间内改变优先级的进程占用CPU百分比
# id 空闲CPU百分比 wa 等待输入输出的CPU时间百分比 hi 硬件CPU中断再用百分比 si软中断占用百分比
# 虚拟机占用百分比
%Cpu(s): 0.2 us, 0.1 sy, 0.0 ni, 99.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
# 内存信息
# total 物理内存总量 free 空闲内存总量 used 使用的物理内存总量 buff/cache 内核缓存的内存量
KiB Mem : 3882032 total, 211112 free, 166384 used, 3504536 buff/cache
# swap
# total 交换区总总量 free 空闲交换区总量 used 使用的交换区总量 avail mem有效内存
KiB Swap: 0 total, 0 free, 0 used. 3409756 avail Mem
# PID-进程ID USER-进程搜有者 PR-进程优先级 NI-nice值负值表示高优先级 正直表示低优先级
# VIRT-进程使用的虚拟内存总量,单位为KB RES-进程使用的,未被换出来的物理内存大小
# SHR-共享内存大小,单位KB S-进程状态 D=不可中断的睡眠状态 R=睡眠 T=跟踪/停止 Z=僵尸进程
# %CPU-上次更新到现在的CPU时间占用百分比 %MEM-进程使用的物理内存百分比
# TIME+/进程使用CPU时间总计,单位1/100秒
# COMMAND-进程名称
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 123036 3736 2428 S 0.0 0.1 4:57.39 systemd
$ top -d 2 //每隔俩秒显示所有进程的资源占用情况
$ top -p 4360,4345 //监控制度的进场
pgrep/pkill/kill/w
pgrep命令以名称为依据从进程运行队列中查找进程,并显示查找到的进场id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。pkill命令可以按照进程名杀死进程。如果想要单独杀死某个进程可以使用kill命令,该命令给指定进程发送信号,大多数用于关闭进程。
usage: pgrep [选项] [参数]
选项:
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称;
-P:指定父进程号;
-g:指定进程组;
-t:指定开启进程的终端;
-u:指定进程的有效用户ID。
参数:
进程名称,指定要查找的进场名称,同时也支持类似grep指令中匹配模式
实例:
$ pgrep -u monsoon -l sh //显示用户为monsoon下名称为sh的进程ID
usage: pkill [选项] [参数]
选项:
-o:仅向找到的最小(起始)进程号发送信号;
-n:仅向找到的最大(结束)进程号发送信号;
-P:指定父进程号发送信号;
-g:指定进程组;
-t:指定开启进程的终端。
参数:
指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。
实例:
pkill gaim
usage:
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
kill -l [signal]
常用信号:
0)用于测试进程是否存在
1)SIGHUP:无需关闭进程让其重读配置文件
2)SIGINT:中止正在运行的进程,相当于ctrl+c
3) SIGQUIT:退出,相当于ctrl+\
9) SIGKILL:强制杀死正在运行的进程
15)SIGTERM:终止正在运行的进程
18)SIGCONT:继续运行
19)SIGSTOP:后台睡眠
指定信号方式:
数字方式,如1
信号完整名字,如SIGHUP
信号简写,如HUP
w
w命令提供了当前登录的用户及其正在执行的进程的信息。
$ w
15:35 up 4:30, 3 users, load averages: 1.36 1.51 1.50
USER TTY FROM LOGIN@ IDLE WHAT
monsoon console - 11:06 4:28 -
monsoon s000 - 12:18 1:21 -bash
后台进程
要在后台启动一个进程,使用&符号,此时该进程不会从用户中读取输入,直到它被移动到前台。当然也可以使用Ctrl+z暂停执行一个程序并把它发送到后台,它会给禁止发送SIGSTOP信号,从而暂停它的执行,它会变为空闲。
$ ./weixin &
$ jobs
[1]+ Running weinxin &
$ tar -cf backup.tar. backup/ ### 按下Ctrl + Z
$ jobs
要在后台继续运行上面被暂停的命令,使用bg命令
$ bg
# 要把后台进程发送到前台,使用fg命令以及人任务的ID,类似
$ jobs
$ fg %1