Chinaunix首页 | 论坛 | 博客
  • 博客访问: 802853
  • 博文数量: 869
  • 博客积分: 201
  • 博客等级: 入伍新兵
  • 技术积分: 3376
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 19:42
文章分类

全部博文(869)

文章存档

2014年(4)

2013年(415)

2012年(453)

我的朋友

分类:

2012-11-19 12:20:34

原文地址:pgrep 和 pkill 使用小记 作者:power562

在停止指定进程时,经常使用如下命令:

  1. kill `ps aux | grep -w program_name | grep -v grep | awk '{print $2}'`
使用 pgrep 和 pkill 可以简单的实现;如下列举几个pgrep和pkill的例子:

pgrep -f program_name 列出进程名为 program_name 的ID,f参数可以匹配command中的关键字;
pkill  -x program_name 结束掉 进程名为 program_name 的进程,x参数启用精确匹配;
pgrep -ln httpd 列出最新启动的apache进程ID,-l 参数用来显示进程名称;
pgrep -lo httpd 列出最早启动的apache进程ID;
ssh 10.10.10.10 "pgrep -f 'httpd' " > /dev/null  根据 $? 来判断是否有启动 apache 进程,然后进行下一步操作
-------------------------------------------------------------------------------------------------------
小结:
grep使用 -w 参数拥有全文精确匹配功能;
pgrep和pkill的 -x 参数只能精确匹配进程名称,无法进行全文精确匹配,虽然可以使用 -f 参数来匹配command中的关键字,但是 -f 和 -x 同时使用却无法起到全文精确匹配的作用;

pidof 和 pgrep 有类似的功能,都可以列出进程的ID,只不过 pidof 要求精确输入进程名,一个字符都不能少,而 pgrep 则可以部分匹配进程名。




-----------------------------------------------------------------------------------------------------
man pgrep的内容中文版
------------------------------------------------------------------------------------------------------
名称

pgrep, pkill – 通过名称和其它属性查找或者发信号给进程。

语法

pgrep [-flvx] [-n | -o] [-d delim] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]

pkill [-signal] [-fvx] [-n | -o] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]

说明

pgrep程序检查在系统的中活动进程,报告进程属性匹配命令行上指定条件的进程的ID。每一个进程ID以一个十进制数表示,通过一个分割字符串和下 一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。例如,

pgrep -G other,daemon

匹配真实组ID是other或者是daemon的进程。如果多个条件被指派,这些匹配条件按逻辑与"AND"规则运算。例如,

pgrep -G other,daemon -U root,daemon

匹配进程它的属性是:

(真实的组ID是other或者是daemon) 与 (真实的用户ID是root或者是daemon)

pkill函数和pgrep相同,除了匹配的进程被信号通知就像用kill(1)替代了pgrep的进程ID的输出。一个信号名称或者数字可以作为pkill的第一个命令行选项。

选项

支持下面的选项:The following options are supported:

-c ctidlist 仅匹配列表中列出的ID的进程。

-d delim 指定每一个匹配的进程ID之间分割字符串。如果没有 -d 选项指定,默认的是新行字符。-d 选项仅在pgrep命令中有效。

-f正则表达式模式将执行与完全进程参数字符串 (从/proc/nnnnn/psinfo文件的pr_psargs字段获得)匹配。如果没有 -f 选项,表达式仅对执行文件名称(从/proc/nnnnn/psinfo文件pr_fname字段获得)匹配。

-g pgrplist仅匹配进程组ID在给定列表中的进程。如果组0包括在列表中,这个被解释为pgrep或者pkill进程的组ID。

-G gidlist仅匹配真实组ID在给定列表中的进程。每一个组ID可以使用组名称或者数字的组ID指定。

-J projidlist匹配项目ID在给定列表中的进程。每一个项目ID可以使用项目的名称或者数字项目ID来指定。

-l长格式输出。输出每一个匹配进程的名称连同进程ID。进程名称从pr_psargs 或者 pr_fname字段获得,依赖于-f选项是否指定。-l选项仅在pgrep命令中有效

-n匹配最新(最近生成的)符合所有其它匹配条件的进程。不能和-o选项一起使用。

-o匹配最旧(最早生成的)符合所有其它匹配条件的进程。不能和-n选项一起使用。

-P ppidlist 仅匹配给定列表中父进程ID的进程。

-s sidlist 仅匹配进程会话ID在给定列表中的进程。如果ID 0在列表中,这个解释为pgrep或者pikill进程的会话ID。

-t termlist 仅匹配与给定列表中终端关联的进程。每一个终端指定为在/dev中终端设备路径名称的后缀。例如term/a 或者 pts/0。

-T taskidlist 仅匹配在给定列表中任务ID的进程。如果ID 0包括在列表中,这个解释为pgrep或者pikill进程的会话ID。

-u euidlist 仅匹配有效用户ID在给定列表中的进程。每个用户ID可以通过一个登录名称或者数字的用户ID指定。

-U uidlist 仅匹配真实的用户ID在给定列表中的进程。每个用户ID可以通过一个登录名称或者数字的用户ID指定。

-v 反向匹配。匹配所有的进程除了符合匹配条件的。

-x 仅认为进程其参数字符串或者执行文件名称正确匹配规定模式是匹配的进程。模式被认为是准确的当所有在进程参数字符串或者可执行文件名称的字符匹配模式。

-z zoneidlist 仅匹配区域ID在给定列表中的进程。每一个区域ID可以使用一个区域名称或者一个数字的区域ID指定。这个选项仅在全局区域中执行有效。如果pkill程序用来往其它区域的进程发信号,进城必须宣称{PRIV_PROC_ZONE}特权。

-signal 指定发往每一个匹配进程的信号。如果没有指定,SIGTERM 是默认的信号。-signal仅在pkill命令中作为第一个选项有效。信号可以是在signal.h中定义的没有SIG前缀的一个符号名字,也可是一个相应的信号数值。

操作

支持如下操作:

pattern

指定一个扩展正则表达式(Extended Regular Expression (ERE))模式来匹配可执行文件名称或者完整的进程参数字符串。ERE语法的完整描述参看regex(5)。

例子

例子1或者一个进程ID

获得sendmail的进程ID:

example% pgrep -x -u root sendmail

283

例子2终止一个进程

终止最近生成的xterm:

example% pkill -n xterm

Exit Status

如下退出值被返回:

0 一个或者多个进程被匹配。

1 没有进程被匹配。

2 指定了无效的命令行参数。

3 出现一个致命的错误。
阅读(71) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~