如何在ps中使用"Regular Expression"?
How to use "Regular Expression" in ps?
我正在尝试使用
ps -C chromi*
查看所有 chromium 进程,但没有成功。我如何在这里使用正则表达式?
How to use "Regular Expression" in ps?
不能,ps
不支持正则表达式。参数按字面意思解析。
How to use "Regular Expression" in ps?
您可以修补 procps
ps
来支持它,很可能(还有另一个!)附加标志。补丁看起来很简单,基本上是另一个使用 regex.h
而不是 strncmp
的 tree traversing parse_*
函数。
我怀疑这样的补丁会成为上游 - 通常使用其他工具,最值得注意的是 pgrep
或 shell 管道和 grep
,通过命令行过滤进程姓名。 ps
必须保持 POSIX 兼容,并且已经有很多选择。
请注意,正则表达式不是“通配符”。咨询 man 7 glob
与 man 7 regex
。正则表达式 chromi*
将匹配 chrom
或 chromiiiii
- chrom
后跟零个或多个 i
.
请注意,带有“触发”字符的不带引号的参数会进行文件名扩展(ls 'chromi*'
与 ls chromi*
)。这与存在匹配模式的文件时传递文字参数不同。如果打算将模式传递给工具,请引用参数以防止文件名扩展。
我想你在找 pgrep
:
pgrep -f chromium
这将只打印 pids,没有更多信息。
在 xargs
的帮助下,这可以再次通过管道传输到 ps 以获得详细输出:
pgrep -f chromium | xargs ps -o pid,cmd,user,etime -p
我正在尝试使用
ps -C chromi*
查看所有 chromium 进程,但没有成功。我如何在这里使用正则表达式?
How to use "Regular Expression" in ps?
不能,ps
不支持正则表达式。参数按字面意思解析。
How to use "Regular Expression" in ps?
您可以修补 procps
ps
来支持它,很可能(还有另一个!)附加标志。补丁看起来很简单,基本上是另一个使用 regex.h
而不是 strncmp
的 tree traversing parse_*
函数。
我怀疑这样的补丁会成为上游 - 通常使用其他工具,最值得注意的是 pgrep
或 shell 管道和 grep
,通过命令行过滤进程姓名。 ps
必须保持 POSIX 兼容,并且已经有很多选择。
请注意,正则表达式不是“通配符”。咨询 man 7 glob
与 man 7 regex
。正则表达式 chromi*
将匹配 chrom
或 chromiiiii
- chrom
后跟零个或多个 i
.
请注意,带有“触发”字符的不带引号的参数会进行文件名扩展(ls 'chromi*'
与 ls chromi*
)。这与存在匹配模式的文件时传递文字参数不同。如果打算将模式传递给工具,请引用参数以防止文件名扩展。
我想你在找 pgrep
:
pgrep -f chromium
这将只打印 pids,没有更多信息。
在 xargs
的帮助下,这可以再次通过管道传输到 ps 以获得详细输出:
pgrep -f chromium | xargs ps -o pid,cmd,user,etime -p