Linux之进程管理(2)相关命令之一
procps工具命令对进程管理的使用:ps pgrep pidof pkill pstree
ps 命令
ps(Process State):report a snapshot of the current processes.
查看当前进程的快照信息表
此命令支持3种风格:
1、SysV风格:选项前必须加-符号,如ps -ef
2、BSD风格:选项前可以不加-符号,如ps aux
3、GUN风格:之前两个-符号,类似长选项,如ps --help
BSD风格选项使用:
a 显示包括所有终端中的进程
x 显示所有非终端中的进程
u 选项中显示进程执行者、cpu、内存等信息
f 选项中显示进程的父进程
j 作业(jobs)控制方式
r 只显示运行状态(R)的信息
T 显示进程所处的终端,只有和终端相关的进程才会显示,否则TTY字段显示会空
p [pid],... :指定pid显示,可以是pidlist,多个用,隔开,如1,439,275
q [pid],... :quick,快速根pid查找,(注意:cent5版本可能无法使用此选项)
C [cmdname],... :指定进程名称查询,可以是cmd列表,多个用,分开,如sshd,syslod,crond
o [option],... 制定特定进程属性信息:
pid、comm、%cpu、%mem、state、tty、euser、ruser
注:特定属性的选项,很多,对应的表示CODE已经其作用显示可以查看对应的man帮助文档,
搜索“STANDARD FORMAT SPECIFIERS”关键字即可列出所有字段CODE及对应介绍。
常用的组合方式:
ps ax :显示所有进程信息
ps aux :显示所有进程并显示其进程发起者
ps auxf :显示所有进程状态并显示进程的父进程
ps axo stat,euid,ruid,tty,tpgid,sess,pgrg,ppid,pid,pcpu,comm,pri,rtprio,ni
状态,有效用户ID,发起用户ID,终端,进程组,会话,父PID,cpu占用,使用的命令
SysV风格选项使用:
-A 显示所有进程状态,同-e选项
-e 显示所有进程状态,同-A选项
-l 显示长格式信息
-f 显示完整格式进程信息
--no-headers 不显示头部的字段表示表示,如显示这些信息USER PID %CPU这一行(第一行)
常见用法命令组合:
#BSD风格按标准格式显示所有进程基本信息:
ps ax
ps axu
#SystV风格显示所有进程基本信息:
ps -ef
ps -elf
ps -elF
ps -elfy
#显示进程信息并显示其对应的进程树状(对应的父进程)结构
ps -ejH注:-H表示为显示进程的阶层结构
ps axjf
#显示进程中的线程信息:
ps -eLf注:-L表示显示此进程线程的号码
ps axms
#显示进程的基本信息及对应的SELinux安全上下文信息:
ps -eo euser,ruser,fuser,f,comm,label注:label表示SELinux安全上下文
ps -eM注:-M表示在进程信息中加入对应的安全上下文信息
ps axZ注:Z选项作用同SystV风格中的-M选项
#显示每个作为root用户运行真实有效ID的信息格式:
ps -u root -U root u
#按进程的命令(CMDNAME)名称只显示进程的PID
ps -C syslod -o pid=注:后面跟=符号表示只打印PID,不会打印其它附加信息及标题头
#按进程PID来显示进程对应的(CMDNAME)进程名
ps p 43 o comm=
ps -q 43 -o comm=注:-q为quick mode快速查找模式,按PID,但是只针对3.2.8及以上版本的ps命令
#按指定关键字段来排序,使用k选项时,可以用[+|-]keyword表示按某一字段进行升序或降序排序
ps axk comm o comm,args注:按所有的命令名称排序,并显示命令名称和命令参数
ps ax --sort pid o comm,args注:这里使用长选项--sort同样可以实现排序
ps k -start_time -ef注:这里按进程的开启时间进程倒叙,显然1号进进程显示在最后一行
#显示进程的优先级、实时优先级
ps axo pri,psr,rtprio注:pri(优先级)、psr(cpu编号)、rtprio(实时优先级,越大越高)
ps axo pid,pri,ni注:ni表示nice值,越小优先级相对越高
进程信息表头字段CODE说明:
USER:进程的发起者
PID:进程号
%CPU:进程所占用的cpu资源百分比
%MEM:进程所占用的物理内存百分比
VSZ:进程使用掉的虚拟内存大小,单位为kb
RSS:进程占用的固定内存大小,单位为kb
TTY:显示进程在哪个终端运行
STAT:进程目前的状态
START:进程被触发的时间(start_time)
COMMAND:触发此进程的命令
进程状态对应的CODE说明:
BSD风格进程状态:
D uninterruptible sleep表示不可中断的睡眠(通常为IO来唤醒)
R running or runnable 表示可运行(在运行队列)
S interruptible sleep 可中断睡眠(等于一个进程结束后,无需其他IO随时可唤醒)
T stopped by job 停止状态,不会被再次控制,需要手动发送信号启动
t stopped by debugger 停止期间可被调试器跟踪
W paging 分页 (只支持2.6.XX以上内核)
X dead 被杀死
Z zombie 僵死状态,不能被其父进程回收
SysV风格:
N:低优先级进程
+:前台进程,占据着某个终端
l:多线程进程
s:会话进程的首个进程(session leader)
用法案例展示:
#显示所有进程[[email protected] init.d]# ps ax | head -n 10
#显示所有进程并显示进程执行用户、内存的等信息[[email protected] init.d]# ps aux | head -n 10
#显示所有进程信息,并显示对应的进程树状结构
[[email protected] init.d]# ps axjf | head -n 10
#显示线程信息[[email protected] init.d]# ps axms | head -n 10
#获取进程的安全信息(SElinux安全上下文)[[email protected] init.d]# ps axZ | tail -n 10
#显示每个作为根用户运行的进程的(真实和有效ID)用户格式:[[email protected] init.d]# ps -U root -u root u | tail -n 10
#自定义显示所有进程的指定字段属性信息[[email protected] ~]# ps axo state,pid,euid,ruid,tty,tpgid,sess,pgrp,ppid,pcpu,comm | head -n 10
#显示特定服务或进程名字的信息[[email protected] init.d]# ps -C sshd -o pid,comm
PID COMMAND
3407 sshd
11484 sshd
#指定多个进程出名称列出简要信息[[email protected] init.d]# ps -C sshd,syslogd,crond
PID TTY TIME CMD
2928 ? 00:00:00 syslogd
3407 ? 00:00:00 sshd
3494 ? 00:00:00 crond
11484 ? 00:00:08 sshd
#只列出指定名称对应的PID号[[email protected] init.d]# ps -C syslogd,crond -o pid=
2928
3494
#只列出对应PID的进程名称[[email protected] init.d]# ps -p 2928,3494 -o comm=
syslogd
crond
#使用quick mode快速模式对指定PID进程查找其进程名称[[email protected] ~]# ps -q 1302 -o comm=
sshd
注意:-q选项在centos5上好像不支持,centos5使用-p选项,子centos7上已经更新为了-q
pgrep 命令
pgrep:look up or signal processes based on name and other attributes
根据名称或信号查找进程及其其它属性信息,支持正则表达式
命令格式:
pgrep [options]... PARTERN
-u [euid|euser] : 按指定进程真正生效者(effetvie user)来查找对应模式匹配的进程
-U [ruid|ruser] : 按指定进程发起者(real user)来查找对应模式匹配的进程
-t [prefix] :按指定终端来查找对应模式进程,prefix格式为/dev/prefix,去掉/dev,如-t pts/0
-P [parentId] :显示指定进程的子进程进行模式匹配
-l : 列出进程对应的名称
-f : 按模式匹配完全对应位进程对应的名称及详细参数
-c : 统计模式匹配对应到的进程的总个数
-a : 显示完整进程格式的进程名称,注:(centos7上version3.3.10开始支持此选项)
实例:
根据模式显示完整的进程格式名称,命令版本不同的不同选项实现:
#在centos6中,默认procps进程管理软件包版本为3.2.8[[email protected] ~]# pgrep -V
pgrep (procps version 3.2.8)
#显示所有bash进程[[email protected] ~]# pgrep -f ‘^\‘ -l
4370 -bash
5241 -bash
#显示所有以pickup开头的完整进程命令[[email protected] ~]# pgrep -f ‘\
5467 pickup -l -t fifo -u
#在Centos7中使用procps-ng版本升级为3.3.10,增加了-a选项[[email protected] ~]# pgrep -V
pgrep from procps-ng 3.3.10
#执行使用-a显示完整命令格式信息[[email protected] ~]# pgrep -a -f ‘^sshd‘
27531 sshd: [email protected]/0,pts/1
其它常见用法:
#显示crond进程中生效者用户为root的PID[[email protected] ~]# pgrep -u root ‘crond‘
3494
#显示named域名解析服务的进程编号已经其进程名称[[email protected] ~]# pgrep -u named -u named ‘named‘ -l
5296 named
#显示进程有效者为rpcuser和postfix的进程编号及命令名称[[email protected] ~]# pgrep -u rpcuser,postfix -l
1603 rpc.statd
1974 qmgr
5467 pickup
#显示和指定tty终端相关的前台进程[[email protected] ~]# pgrep -t pts/1 -l
5241 bash
5697 vim
#显示指定PID进程下的子进程,注意:只会显示子进程,不会递归显示其子进程下的进程[[email protected] ~]# pgrep -P 1725 -l
1828 hald-addon-inpu
1836 hald-addon-acpi
#显示所有切换登录界面的进程[[email protected] ~]# pgrep -l -f ‘\
2083 /sbin/mingetty /dev/tty1
2085 /sbin/mingetty /dev/tty2
2088 /sbin/mingetty /dev/tty3
2092 /sbin/mingetty /dev/tty4
2094 /sbin/mingetty /dev/tty5
2096 /sbin/mingetty /dev/tty6
#显示所有打开的bash进程的终端、PID、进程用户、有效用户、进程命令[[email protected] ~]# for pid in `pgrep ‘\‘`; do ps -p ${pid} --no-headers -o tty,pid,ruser,euser,comm; done
pts/0 4370 root root bash
pts/1 5241 root root bash
#显示当前所在的进程组的第一个会话进程[[email protected] ~]# pgrep -s 0 -l
4370 bash
pidof 命令
pidof :find the process ID of a running program.
根据运行进程的名称来查找对应的PID
选项及用法:
pidof [options] program [program]... 注:多个进程名用空格隔开,如crond vim bash
-s :只显示指定进程名称产生的第一个进程的进程PID
-o omitpid :进程名称相同,过滤掉指定的PID,支持使用-o %PPID表示过滤掉父进程
-c :计算指定的进程个数
常见案例:
#显示crond进程的产生的PID[[email protected] ~]# pidof crond
2007
#查看多个进程产生的PID[[email protected] ~]# pidof crond man hald
2007 5871 1724
#显示当前的终端的第一个sshd远程连接[[email protected] ~]# pidof -s sshd
4366
#显示当前shell进程组第一个会话进程[[email protected] ~]# pidof -s bash
27770
#显示当前的bash,过滤掉bash的父级知道当前未产生子bash进程的bash[[email protected] ~]# pidof -o %PPID bash
27535
#查看当前开启的bash个数[[email protected] ~]# pgrep -c bash
4
#验证上面个数,下面列出了4个PID表示却是开启了4个bash进程[[email protected] ~]# pgrep bash
27535
27770
27903
27914
pkill 命令
pkill (1) - look up or signal processes based on name and other attributes
通过对根据模式找出的指定进程发送信号来对进程进行通信或调整,同样支持正则表达式
选项格式及用法:
pkill [option]... PARTERN
-f, --full :匹配PARTERN中完整的进程相关命令行及参数
-u, --euid [euid|euser] : 杀死指定进程真正生效者(effetvie user)来查找对应模式匹配的进程
-U,--uid [ruid|ruser] : 杀死指定定进程发起者(real user)来查找对应模式匹配的进程
-t,--terminal [prefix] :杀死指定终端来查对应匹配模式进程,prefix格式为/dev/prefix,去掉/dev,如-t pts/0
-P,--parent [parentId] :显示指定进程的子进程进行模式匹配
-c,--count :发送信号后,打印出统计匹配的进程的格式
-e:发送信号后打印并输出进程的名称及PID
常用的案例:
1、简单的单个进程终止
#查看当前打开的vim编辑器进程[[email protected] ~]# pgrep vim -l
27967 vim
#杀掉所有vim进程
#vim编辑器退强制退出,下面显示进程杀死信号Vim: Caught deadly signal TERM0,0-1 All
Vim: Finished.
Terminated
#杀死进程并打印其对应pid[[email protected] ~]# pkill -e vim
vim killed (pid 27978)
2、杀死模式中匹配的进程完整命令行对应的所有进程
#打开一个额外终端进行tar进程模拟[[email protected] ~]# tar -cvf - /* | tar -tvf -
#杀死匹配的tar进程,并显示指定模式匹配进程的个数[[email protected] ~]# pkill -c -f ‘^tar.*-.*‘
2
解析:这里显示了2,表示处理了两个tar进程命令,前面的模拟打包和后面的模拟列出。
3、直接杀掉后台进程
#再次测试打开一个额外终端进行tar进程模拟,并放入后台执行[[email protected] ~]# tar -cvf - /* | tar -tvf - &
#直接杀死模式匹配的完整tar命令及参数进程[[email protected] ~]# pkill -KILL -f ‘^tar.*-.*‘
4、前后台的的进程处理及信号切换
#再次测试打开一个额外终端进行tar进程模拟[[email protected] ~]# tar -cvf - /* | tar -tvf -
#发送19信号放入让tar进程放入后台休眠进入暂停状态,并打印处理结果[[email protected] ~]# pkill -19 -e -f ‘^tar.*-.*‘
tar killed (pid 5319)
tar killed (pid 5320)
#此时在测试的终端上按回车显示了tar命令已被放入后台[1]+ Stopped tar -cvf - /* | tar -tvf -
#通过发送18信号让其回到前台继续运行[[email protected] ~]# pkill -18 -e -f ‘^tar.*-.*‘
tar killed (pid 5319)
tar killed (pid 5320)
#发送KILL信号来杀死进程[[email protected] ~]# pkill -9 -e -f ‘^tar.*-.*‘
tar killed (pid 5319)
tar killed (pid 5320)
解析:这里打印的PID是不会变的,两个tar进程都被杀死。
#再次回到测试终端查看当前作业,要快会显示进程被杀掉状态,否则杀死进程后不显示[[email protected] ~]# jobs
[1]+ Killed tar -cvf - /* | tar -tvf -
解析:这里已经Killed说明被此进程已经被强制杀死。
pstree 命令
pstree :pstree - display a tree of processes
以树状结构显示进程
选项及介绍:
pstree [options]
-a :显示执行程序的命令与完整参数
-c :取消同名程序,合并显示
-h :对输出的结果进行处理,高亮显示正在执行的程序
-l : 以长用法显示
-n :以PID大小排序
-u :显示UID信息
-G :使用VT100终端编码显示
-U :使用UTF-8(Unicode)编码显示
简单实例:
#显示当系统进程数
解析:不加参数默认情况下,同一进程节点下的进程有相同名称的进程会自动合并,如上图中所示,其中红框部分表示有同名进程出现合并,比如”-6*[mingetty]”表示在init进程节点下,有6个mingetty进程,也就是负责切换终端时提供交互式登录界面的进程。而绿框部分的花括号及{}里表示父进程中子线程,比如rsyslogd日志服务提供了3个子线程。
本文出自 “孟天霸-IT的垃圾回收站” 博客,谢绝转载!