列出它们:
ps aux | awk '{print $7}' | grep -v "?"
要计算它们:
ps aux | awk '{print $7}' | grep -v "?" | wc -l
您需要从该数字中减去1,因为它包括顶部的TTY标头。
这全部取决于您是否要计算正在运行的子外壳数或是否要计算打开的终端窗口数。
要仅计算终端窗口,您需要使用:
ls /dev/pts/ | wc -l (stated in a previous answer)
例如:
在我的系统上,当前有六个tty可用。我也有一个终端打开pts / 0,它在fg或bg中运行4个进程。
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
expect
模拟的用户会话,xterm
未运行shell等是否计数?