如何计算正在运行的外壳/终端数量?


10

我正在尝试计算当前正在运行多少个外壳或终端窗口。

我试过了 ps a|grep bash; ps a|grep tty;

但这可能是不准确的。


您对终端窗口的定义是什么?gnome终端选项卡,虚拟终端,通过ssh登录的用户,屏幕/ tmux窗格,expect模拟的用户会话,xterm未运行shell等是否计数?
斯特凡Chazelas

1
终端窗口以“ ctrl-alt-t”打开。我通过计算> who命令who | grep“ pts” | wc -l中的
Martincho 2014年

Answers:


6
ls /dev/pts/  | wc -l

使用以上命令对打开的终端窗口进行计数。


试过了。它显示23。而且我只打开了一个终端/重击窗口。
马丁乔

@ user68957您是否有机会与多个用户共享计算机?
Chirag Bhatia-chirag64

一台家用计算机,当时只有一个用户。诀窍是计算打开了多少个终端窗口或终端进程。如果我>>谁,它将列出两个用户:0 yyyy-mm-dd hh-mm(:0)我pts / 0 yyyy-mm-dd hh-mm(:0)如果我打开另一个终端窗口,则>显示给谁:我:0 yyyy-mm-dd hh-mm(:0)我pts / 0 yyyy-mm-dd hh-mm(:0)me pts / 1 yyyy-mm-dd hh-mm(: 0)我应该只是grep“ pts /”吗?
马丁乔2014年

2

列出它们:

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

grep并且awk是多余的,使用awk '/pattern/;而这并不在我的机器上工作-它报告19时,我有1
jasonwryan

我有点困惑。现在,我在Ubuntu 14上。只有一个终端/ bash窗口打开。使用abobe命令,我得到23或13,如果我用ctrl-alt-t打开另一个终端,我应该得到1或2
Martincho 2014年

第一条命令计算的是子进程在后台Shell中运行的过程,而不仅仅是打开终端会话的过程
高度,2014年

@jasonwryan-它对我的效果很好。将grep与awk一起使用是个人喜好。如果有人更愿意在awk中完成整个操作,那很好。
高度

“对我而言,它工作得很好”几乎不能证实您的答案……也许您可以包括“您的”含义的一些细节,以便人们意识到它仅适用于该系统。
2014年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.