[英]How to top a list of pids from a file in linux?
我有一個腳本來獲取pid的列表,我想查看cpu的使用情況,以及使用top的那些pid的內存使用情況。
我能夠使用以下命令列出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。
謝謝
您正在使用|
(管道),它將一個進程的stdout連接到另一個進程的stdin。
您需要的是
top -p $(your_function_here)
例如
top -p $(gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g')
先前的答案是正確的解決方案。 我只說幾行,以了解您的命令行中出了什么問題。 您已將pids交給了頂級命令stdin,而不是作為參數。 用xargs解決很簡單:
gal vppoc|cut -d" " -f1|xargs|sed -e 's/ /,/g'| xargs top -p
但是,由於頂部沒有tty,它仍然無法工作。 可以解決在批處理模式下運行top的問題:
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'`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.