使用fuser查找正在运行的进程数

使用fuser查找正在运行的进程数

我们使用熔断器来查找与特定端口关联的日志。

fuser /test/log*

这会产生与端口关联的日志列表

如何找到输出的行数?

我尝试过但|wc - l没有运气。

答案1

$ fuser /usr/bin/zsh
/usr/bin/zsh:         4771e  4778e  7305e  9848e 12416e
$ fuser /usr/bin/zsh > /dev/null
/usr/bin/zsh:       eeeee
$ fuser /usr/bin/zsh 2> /dev/null
  4771  4778  7305  9848 12416

正如你所看到的,fuser它的输出在 stdout 和 stderr 之间分割,其中 stdout 有 pid,stderr 有修饰(如果有的话,还有错误),因此要找到 pid 的数量,你可以丢弃 stderr 并使用以下命令计算 stdout 中的单词数:

n=$(fuser /test/log* 2> /dev/null | wc -w)

要找到数量独特的pids(如果某些进程打开了多个文件/test/log*),在 zsh 中,您可以执行以下操作:

n=${#${(u)$(fuser /test/log/* 2> /dev/null)}}

(这还有利于保留 的退出状态fuser)。

或者使用lsof而不是fuser

n=$(lsof -t /test/log/* | wc -l)

其中-t,lsof为您提供每行一个 pid 列表,且不重复。

相关内容