pgrep
man pgrep
或者man pkill
时,发现二者的说明是在一起的,二者参数说明有很多共同的地方,这里为了不混淆,分开说
作用
通过进程名找进程pid
用法
pgrep [-Lafilnoqvx] [-F pidfile] [-G gid] [-P ppid] [-U uid] [-d delim] [-g pgrp] [-t tty] [-u euid] pattern
说明
进程名称为pattern,也就是说可以正则匹配
常用参数说明
- -d:指定分隔符
- -l:输出pid和进程名
- -v:取反,显示没有匹配成功的进程
- -a:包含匹配进程的祖先进程
- -U:限定
举例
pgrep -l "^ng"
:查询以ng开头的所有进程,返回pid和进程名
pkill
作用
通过进程名杀死匹配到的进程
用法
pkill [-signal] [-ILafilnovx] [-F pidfile] [-G gid] [-P ppid] [-U uid] [-g pgrp] [-t tty] [-u euid] pattern
常用参数说明,多数和pgrep一样
- -I:杀死进程前,需要用户确认
举例
pkill -9 nginx
:杀掉nginx的所有进程
xargs
作用
将上一个命令的输出,转化为下一个命令的参数,做参数中转
用法
commandA [options] args|xargs [-0opt] [-E eofstr] [-I replstr [-R replacements]] [-J replstr] [-L number] [-n number [-x]] [-P maxprocs] [-s size] [utility [argument ...]] commandB
常用参数说明
- -d:指定分隔符,可以将一串输出拆开
- -J replstr:指定占位符,供后面的命令引用
- -I replstr:对输入的每一行,将占位符替换掉,可以循环输入参数,与-J的区别在于,-J是一股脑把所有输出都当做新命令的一个参数传入了,而-I是将输入的每一行分别当做新命令的参数,循环调用新命令,若不指名-R参数,占位符最多替换5次
- -t 、-p:在执行之前输出命令本身,其中-p更进一步,不经输出,还会要求用户确认,确认了才执行
- -E str:指定参数结尾,之后的输入不被新命令接收
- -L num:输入的每num行作为新命令的参数调用一次新命令
- -n num:输入的每num个参数(使用-d指定分隔符)作为新命令的参数,调用一次新命令,最后一次不足的话,也会调用
举例
ls -ll|awk '{if (NR != 1)print $NF}'|xargs -L 3 -J % echo %
:当前目录下的文件,每三个一行,输出出来
ps
和top类似,只不过是一次性的,不是持续动态展示进程情况
参数
- -A,-e:显示全部进程,不区分用户
- -u username:指定进程用户名
- u:显示用户名
- p pid:只显示指定进程id的进程
- -c:只显示进程名,不显示进程的全路径和参数
- -o:指定显示的列,列的关键字见man ps的OBSOLETE SORT KEYS部分
- L:展示指定列
举例
ps -Lp pgrep -u admin java
c -o user,pid,ppid,%cpu,%mem,cmd --no-header|sort -nk 4,4 -r