我正在尝试计算当前正在运行的 shell 或终端窗口的数量。
我试过ps a|grep bash;
ps a|grep tty;
但它可能不准确。
答案1
ls /dev/pts/ | wc -l
使用上面的命令来计算打开的终端窗口的数量。
答案2
列出它们:
ps aux | awk '{print $7}' | grep -v "?"
计算它们:
ps aux | awk '{print $7}' | grep -v "?" | wc -l
您需要从该数字中减去 1,因为它包含顶部 TTY 标头。
这完全取决于您是否想要计算正在运行的子 shell 数量或者是否想要计算打开的终端窗口数量。
要仅计算终端窗口,您需要使用:
ls /dev/pts/ | wc -l (stated in a previous answer)
例如:
在我的系统上,当前有 6 个可用的 tty。我还有一个打开的终端 pts/0,它有 4 个进程在 fg 或 bg 中运行。
root 4565 0.0 0.0 4060 576 tty1 Ss+ May01 0:00 /sbin/mingetty /dev/tty1
root 4567 0.0 0.0 4060 572 tty2 Ss+ May01 0:00 /sbin/mingetty /dev/tty2
root 4569 0.0 0.0 4060 568 tty3 Ss+ May01 0:00 /sbin/mingetty /dev/tty3
root 4571 0.0 0.0 4060 576 tty4 Ss+ May01 0:00 /sbin/mingetty /dev/tty4
root 4573 0.0 0.0 4060 576 tty5 Ss+ May01 0:00 /sbin/mingetty /dev/tty5
root 4575 0.0 0.0 4060 572 tty6 Ss+ May01 0:00 /sbin/mingetty /dev/tty6
me 17482 0.0 0.0 110236 1136 pts/0 R+ 11:36 0:00 ps aux
root 20374 0.0 0.0 108336 1816 pts/0 Ss May23 0:00 -bash
root 20953 0.0 0.1 161436 1960 pts/0 S May23 0:00 su - me
me 20954 0.0 0.1 108524 1984 pts/0 S May23 0:00 -bash
如果你想删除后台子进程,那么只需通过管道传递给 uniq:
ps aux | awk '{print $7}' | grep -v "?" | uniq | wc -l
您仍然需要为 TTY 的标题标题减去 1,但是您可以通过完全删除 tty 来进一步改进这一点,因为您似乎并不关心这些。
ps aux | awk '{print $7}' | grep -v "?" | grep -vi "tty*" | uniq
这将为您提供准确的计数。
编辑
考虑更多“ps -a”会更好,你可以省略第一个 grep。
ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
答案3
在 macOS 上您可以使用:
cnt=$(w -h | grep "^$(whoami) *s[^ ]* *-"|wc -l)
echo "Your current terminal sessions: $cnt"