如何计算有多少个 shell/终端正在运行?

如何计算有多少个 shell/终端正在运行?

我正在尝试计算当前正在运行的 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"

在这里找到:https://stackoverflow.com/a/6180547/6320039

答案4

您可以\l在 PS1 变量中添加该选项,例如:

export PS1="terminal #\l \W \$ "

这将从零开始计算您的终端。

更多相关信息请参见GNU 网站

希望这可以帮助。

相关内容