如何让 pgrep 显示完整的进程信息

如何让 pgrep 显示完整的进程信息

有什么方法可以让pgrep我获得每个进程的所有信息ps吗?我知道我可以ps通过管道传输grep,但这需要输入很多内容,而且还会给出grep我不想要的进程本身。

答案1

pgrep的输出选项非常有限。您几乎肯定需要将其发送回去ps才能获取重要信息。您可以使用 中的 bash 函数自动执行此操作~/.bashrc

function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }

然后使用以下命令调用该命令。

ppgrep <pattern>

答案2

结合pgrep使用!psxargs

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选项显示信息但其行为有所不同:

不确定 *BSD 使用什么代码,但是他们的手册页记录旧的-fl行为。

不幸的是,您甚至无法-fl便携使用——在最近的 procps-ng 中,-f( --list-name) 始终只打印可执行文件名称。

答案4

对 grep 使用 -v 选项 - 它返回除请求的模式之外的所有内容。

ps -ef | grep <process> | grep -v grep

相关内容