每次查找关心的进程都去ps 再 grep显得好麻烦,而且这是一个非常常用的操作,所以,熟练使用pgrep将有效提高工作效率。
如果不看文档直接去pgrep 你关心的东西,可能得不到想要的效果,因为你关心的是进程的参数,而不是进程名,而且只输出pid,似乎也用处不大,所以,你可能非常关心两个选项:
-f: 模拟情况下,只匹配进程名(/proc/$pid/comm),使用-f选项可以匹配整个命令行(/proc/$pid/cmdline);
-a: 默认只输出pid, 使用-a选项可以输出pid 和整个命令行
所以,pgrep的正确姿势为:
1 |
pgrep -af $pattern |
高级用法:
当我们想在 a.sh 中判断a.sh脚本是否已经在执行时,我们可以通过 -o 选项来实现:
1 |
pgrep -of a.sh |
如果得到的pid就是自己,则说明没有已经在运行的a.sh;
按照ppid来查找:
1 |
pgrep -P $pid |
工欲善其事,必先利其器