Answers:
pgrep
的输出选项非常有限。您几乎肯定需要将其发送回去,ps
以获取重要信息。您可以通过在Windows中使用bash函数来自动执行此操作~/.bashrc
。
function ppgrep() { pgrep "$@" | xargs --no-run-if-empty ps fp; }
然后用调用命令。
ppgrep <pattern>
ps
标志需要连字符:function ppgrep() { pgrep "$@" | xargs ps -fp 2> /dev/null; }
-r
该选项仅在收到列表后才执行命令。
ps fp $(pgrep -d, "$@")
结合pgrep
与ps
使用xargs
!
pgrep <your pgrep-criteria> | xargs ps <your ps options> -p
例如尝试
pgrep -u user | xargs ps -f -p
以获得的完整进程列表user
。
保留第一行与列名是很好的。grep
总是删除列名。
以下仅给您PID +完整的命令行。对于“所有信息ps
都可以”,请参见其他答案...
大多数Linux使用procps-ng。自3.3.4(2012年发布)以来,pgrep -a
(--list-full
)显示完整的命令行。
注意:默认情况下,pgrep只将您提供的模式与可执行文件名相匹配。如果要与完整的命令行匹配(如grepping ps一样),请添加-f
(--full
)选项。
在较旧的版本(包括原始的procps项目)中,-l
option显示信息,但其行为有所不同:
pgrep -fl
将模式与完整命令行匹配,并显示完整命令行。pgrep -l
仅匹配可执行文件名,仅显示可执行文件名。不知道* BSD使用什么代码,但是其手册页记录了旧的-fl
行为。
不幸的是,您甚至不能随便使用-fl
-在最近的procps-ng中,-f
(--list-name
)始终仅打印可执行文件名称。
用于GNU版本的pgrep
的-i
(不区分大小写)不被支持,并且长+模糊输出与实现-af
。
$ pgrep -af apache
OUTPUT:
1748 /usr/sbin/apache2 -k start
手册页:
-a, --list-full
List the full command line as well as the process ID. (pgrep only.)
-f, --full
The pattern is normally only matched against the process name.
When -f is set, the full command line is used.
在OSX上(通过推论,在BSD上)-l
(长输出)与-f
(与完整参数列表匹配)结合使用将显示完整的命令(-i
不区分大小写):
$ pgrep -fil ssh
OUTPUT:
33770 ssh: abc@192.168.0.123-22 [mux] t
该手册页:
-l Long output. For pgrep, print the
process name in addition to the
process ID for each matching
process. If used in conjunction
with -f, print the process ID and
the full argument list for each
matching process. For pkill, dis-
play the kill command used for
each process killed.
使用-v选项进行grep-它返回所有内容,但返回请求的模式。
ps -ef | grep <process> | grep -v grep
pgrep -u user | xargs ps -f -p
我认为没有,通过使用pgrep的-l选项可以获得的最多信息是名称和进程ID。
ps支持各种格式设置选项,因此我只是为要保存的键入内容起一个别名。从输出中排除grep进程的一种简单方法是添加一条额外的管道grep -v grep
以排除任何grep进程。
为了消除此grep
过程,您可以将方括号用作模式的一部分:
ps -ef | grep '[t]ty'
您可以使用ps
和完成此操作pgrep
:
ps -fp $(pgrep -d, tty)
function ppgrep() { pgrep "$@" | xargs ps fp 2> /dev/null; }
否则,如果没有进程与您的搜索匹配,它将转储整个ps
使用情况。