我有一个脚本来获取pid的列表 我想看看使用top的cpu使用情况,这些pids的内存使用情况。
我可以使用以下内容列出pid列表:
top -p pid1,pid2,pid3
我有一个函数返回我需要的pid,我将其转换为逗号分隔列表,如下所示:
$ gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'
12775,13319,14404,14549,14920,27534
但是,以下情况不起作用:
gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'| top -p
它给出错误:
top: -p argument missing
需要一些帮助才能实现这一目标 - 即能够通过上面的函数返回顶部的pid。
由于
答案 0 :(得分:1)
您正在使用|
(管道),它将一个进程的stdout连接到另一个进程的stdin。
您需要的是
top -p $(your_function_here)
例如
top -p $(gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g')
答案 1 :(得分:1)
之前的答案是正确的解决方案。 我只想说几行来了解命令行中的错误。 你已经将pid给了top命令stdin而不是参数。 用xargs解决它很简单:
gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'| xargs top -p
然而它仍然无效,因为顶部没有tty。 这可以解决以批处理模式运行:
gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'| xargs top -b -p
它在批处理模式下工作,因此您无法控制它,并且它与tty没有连接以刷新屏幕。
要处理tty,不应该通过管道使用top命令。可以使用上一个答案中的方式或其他语法来运行命令并从内部命令获取参数值来解决此问题:
top -p `gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'`