电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

shell grep 查找进程的小技巧


发布日期:2021/8/1
 
大部分人在写Shell 过滤进程的时候 都会使用 grep 在 ps aux 的输出结果中查找指定的进程但此时也会把 grep 进程也显示出来 比如查找 pptpd 进程会匹配出来两条

复制代码 代码如下:

[root@selboo ~]# ps aux | grep pptp

root pts/ R+ : : grep pptp

root ? Ss Oct : /usr/sbin/pptpd

常见的防止grep进程出现的方法就是在对加一个管道 grep v grep 进行过滤

复制代码 代码如下:

[root@selboo ~]# ps aux | grep pptp | grep v grep

root ? Ss Oct : /usr/sbin/pptpd

还有一个更方便的方法是用 正则 grep [p]ptpd来搜索pptpd这个进程

复制代码 代码如下:

[root@selboo ~]# ps aux | grep [p]ptp

root ? Ss Oct : /usr/sbin/pptpd

虽然说它比 grep v grep 也未必方便多少但是如果用大量循环的监控脚本上每次都能减少一次系统grep调用也就是减少一次创建进程虽然提升很小可以忽略不计但是用在shell写的监控脚本上来说多少还有点提升的优化就是注重细节嘛

以下是执行五次测试结果

使用grep v grep 方式

复制代码 代码如下:

[root@selboo etc]# time for (( i=; i<=; i++ )) ;do ps aux | grep pptp | grep v pptp &>/dev/null; done

real ms ms ms ms ms

user ms ms ms ms ms

sys ms ms ms ms ms

使用正则方式

复制代码 代码如下:

[root@selboo etc]# time for (( i=; i<=; i++ )) ;do ps aux | grep [p]ptp &>/dev/null; done

real ms ms ms ms ms

user ms ms ms ms ms

sys ms ms ms ms ms

上一篇:关于shell命令的定向输出 2&gt;&1

下一篇:批量安装windows补丁的批处理脚本