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

Need to insert the value of process ID dynamically into a command

我想在我的 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 的最新值,并且可以在此处插入变量。

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

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

现在我们可以引用它来直接传递给 watch 了:

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

另一种方式。