需要将进程ID的值动态插入到命令中

时间:2015-04-07 14:33:56

标签: linux process centos file-descriptor

我想监视在centos框上运行的进程打开的文件描述符的数量。以下命令对我有用

watch -n 1 "ls /proc/pid/fd | wc -l"

当重新启动上述过程时,我需要监视相同的问题。 pid发生了变化,我无法获得统计数据。

好消息是pname是不变的。所以我可以使用pgrep pname提取pid。

那么如何以下面的方式使用命令:

watch -n 1 "ls /proc/"pgrep <pname>"/fd | wc -l"

我希望动态选择pgrep pname值。

有没有办法可以定义一个连续获取pgrep pname最新值的变量,我可以在这里插入变量。

2 个答案:

答案 0 :(得分:1)

watch每次都将它的命令评估为shell命令,所以我们首先必须找到一个产生输出的shell命令。由于可能有多个匹配过程,我们可以使用循环:

for pid in $(pgrep myprocess); do ls "/proc/$pid/fd"; done | wc -l

现在我们可以引用它来直接传递它来观察:

watch -n 1 'for pid in $(pgrep myprocess); do ls "/proc/$pid/fd"; done | wc -l'

答案 1 :(得分:0)

watch -n 1 "pgrep memcached | xargs -I{} ls /proc/{}/fd | wc -l"

另一种方式。