xcz*_*zhh 94 text command-line bash
我刚刚在我的 Ubuntu 上尝试了以下命令,它没有显示任何内容:
pgrep php5
难道它不应该返回 php5 的进程 id(下面的命令就是这样做的)?:
ps aux | grep php5
那么,这两个命令有什么区别呢?
jll*_*gre 89
该ps aux | grep x命令给出的结果比pgrep x本质上“更好”,因为您缺少后者的选项。
只需使用-ffor 选项pgrep来搜索完整的命令行,而不仅仅是其默认行为的进程名称,例如:
pgrep -f php5
Run Code Online (Sandbox Code Playgroud)
与ps | grep您需要过滤掉grep线条或使用图案技巧的构造不同,pgrep只是不会按设计选择自己。
此外,如果您的模式出现在ps USER列中,您将在输出中获得不需要的进程,pgrep不会受到此缺陷的影响。
如果您想要完整的详细信息而不仅仅是 pid,您可以使用:
ps wup $(pgrep -f python)
Run Code Online (Sandbox Code Playgroud)
这比
ps aux | grep python | grep -v grep
Run Code Online (Sandbox Code Playgroud)
或者
ps aux | grep p[y]thon
Run Code Online (Sandbox Code Playgroud)
ish*_*ish 87
ps aux包括完整的命令行(路径和参数),而 pgrep 只查看可执行文件名称的前 15 个字符ps aux返回每个进程的完整命令行,而pgrep只查看可执行文件的名称。
这意味着grepping ps aux输出将匹配路径中出现的任何内容或进程'二进制文件的参数:例如`
ps aux | grep php5 会匹配 /usr/share/php5/i-am-a-perl-script.plpgrep php5不会以我的系统为例——只有我们将使用 python 而不是php5:
ps aux | grep python 给我们:izx 2348 0.0 0.7 514928 15644?SL Jun24 0:00 /usr/bin/ python /usr/lib/unity-lens-video/unity-lens-video izx 2444 0.0 0.9 547392 18864?SL Jun24 0:01 /usr/bin/ python /usr/lib/unity-scope-video-remote/unity-scope-video-remote 根 2805 0.0 0.5 95436 12204 ? S Jun24 0:00 /usr/bin/ python /usr/lib/system-service/system-service-d izx 6272 0.0 2.9 664400 60320 ? SNl Jun24 1:16 /usr/bin/ python /usr/bin/update-manager --no-focus-on-map 根 11729 0.0 0.9 180508 19516 ? S Jun25 0:00 python /usr/lib/software-properties/software-properties-dbus
pgrep python仅返回11729,您将在上面的列表中看到:根 11729 0.0 0.9 180508 19516 ? S Jun25 0:00 python /usr/lib/software-properties/software-properties-dbus