进程管理的常用命令

$ 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