有什么方法可以让pgrep
我获得每个进程的所有信息ps
吗?我知道我可以ps
通过管道传输grep
,但这需要输入很多内容,而且还会给出grep
我不想要的进程本身。
答案1
pgrep
的输出选项非常有限。您几乎肯定需要将其发送回去ps
才能获取重要信息。您可以使用 中的 bash 函数自动执行此操作~/.bashrc
。
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
然后使用以下命令调用该命令。
ppgrep <pattern>
答案2
结合pgrep
使用!ps
xargs
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
例如尝试
pgrep -u user | xargs ps -f -p
获取 的完整进程列表user
。选项-u user
限制pgrep
为用户给定(作为数字或名称),而ps
选项-f -p
要求选定 PID 的完整格式列表。
很高兴您保留第一行的列名。grep
总是删除列名。
答案3
以下仅提供 PID + 完整命令行。有关“所有信息ps
”,请参阅其他答案...
大多数 Linux 使用处理-ng. 自 3.3.4(2012 年发布)以来,pgrep -a
( --list-full
) 显示完整命令行。
注意:默认情况下,pgrep 仅将您提供的模式与可执行文件名称进行匹配。如果您想匹配完整命令行(如 grepping ps 所做的那样),请添加-f
( --full
) 选项。
在旧版本中(包括原版进程项目),-l
选项显示信息但其行为有所不同:
pgrep -fl
将模式与完整命令行进行匹配并显示完整命令行。pgrep -l
单独匹配可执行文件名称并仅显示可执行文件名称。
如果您不想完全匹配,则无法看到完整的命令行 :-( [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526355#15]
不确定 *BSD 使用什么代码,但是他们的手册页记录旧的-fl
行为。
不幸的是,您甚至无法-fl
便携使用——在最近的 procps-ng 中,-f
( --list-name
) 始终只打印可执行文件名称。
答案4
对 grep 使用 -v 选项 - 它返回除请求的模式之外的所有内容。
ps -ef | grep <process> | grep -v grep