如果一个程序有多个实例,运行pidof program
会给出:
`1 2 3`
top -p
接受逗号分隔的参数:1, 2, 3
.
这意味着这top -p `pidof program`
行不通:
top: unknown argument '1'
usage: top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...]
你能告诉我如何做到这一点吗?我不熟悉 awk、sed 等......
答案1
sed
像这样的简单事情的替代方法是tr
:
top -p $(pidof program | tr ' ' ',')
tr
还可以轻松处理可变数量的空格:
tr -s ' ' ','
此外,如果你有可用的,pgrep
可以在这里很好地工作:
top -p $(pgrep -d , program)
确保在-d
和之间留有空格,,
因为逗号是参数(分隔符)。
另请注意,pgrep 将返回“program”的每个结果,因此如果您有一个名为“program-foo”的进程,那么它也将被返回(因此得名 pgrep)。
答案2
sed
将您的替换为
,
:
top -p $(pidof program | sed 's/ /, /g')
答案3
这对于监视多个程序非常有效:
top -p `pgrep -d, -f program1`, `pgrep -d, -f program2`