我该如何pgrep -U someUserName
使用ps
和grep
?即不依赖于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
这是一种更正确、更强大的方法,应该广泛应用。