使用普通的 grep 模拟 pgrep

使用普通的 grep 模拟 pgrep

我该如何pgrep -U someUserName使用psgrep?即不依赖于pgrep在系统中设置?

答案1

单程:

ps -U someUserName -o pid,comm | awk '/someProcessName/{print $1}'

请注意,如果有多个与用户和进程名称匹配的进程正在运行,您可能会获得多个进程 ID 作为输出。

输出ps实际上是为了便于阅读而制作的,而不是为了像这样处理。还有其他工具可以以更适合脚本的格式提供对进程列表的更低级别访问,例如pgrep,Perl/Python/... 库等等。


使用仅有的 ps正如grep你所要求的,人们可以这样做

ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'

这将包括前导空格,但这在应用中应该是一个问题,例如

for i in $(ps -U someUserName -o pid,comm | grep 'someProcessName' | grep -oE '^ *([^ ]*)'); do
    kill $i
done

应该管用。

但正如我所说,pkill这是一种更正确、更强大的方法,应该广泛应用。

相关内容