需要在命令中动态插入进程 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"
另一种方式。
我想在我的 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"
另一种方式。