Comment compter le nombre de shell / terminaux en cours d'exécution?

10

J'essaie de compter le nombre de fenêtres de shell ou de terminal en cours d'exécution.

j'ai essayé ps a|grep bash; ps a|grep tty;

Mais cela peut être inexact.

Martincho
la source
Quelle est votre définition de la fenêtre de terminal ? Est-ce qu'un onglet gnome-terminal, un terminal virtuel, une personne qui se connecte via ssh, un panneau screen / tmux, expectune session utilisateur émulée, xtermne pas exécuter un shell, etc., compte?
Stéphane Chazelas
1
La fenêtre du terminal s'est ouverte avec "ctrl-alt-t". Je l'ai résolu en comptant combien de "pts" sont dans> qui commandent qui | grep "pts" | wc -l
Martincho

Réponses:

6
ls /dev/pts/  | wc -l

Utilisez la commande ci-dessus pour compter les fenêtres de terminal ouvertes.

Ramesh
la source
J'ai essayé ça. Il montre 23. Et je n'ai qu'une seule fenêtre de terminal / bash ouverte.
Martincho
@ user68957 Êtes-vous sur un ordinateur partagé avec plusieurs utilisateurs par hasard?
Chirag Bhatia - chirag64
Un ordinateur personnel, un utilisateur à la fois. L'astuce serait de compter le nombre de fenêtres de terminal ouvertes ou de processus de terminal. Si je fais un> qui, il répertorie deux utilisateurs moi: 0 aaaa-mm-jj hh-mm (: 0) me pts / 0 aaaa-mm-jj hh-mm (: 0) Si j'ouvre une autre fenêtre de terminal, avec > qui il montre: moi: 0 aaaa-mm-jj hh-mm (: 0) me pts / 0 aaaa-mm-jj hh-mm (: 0) me pts / 1 aaaa-mm-jj hh-mm (: 0) Dois-je simplement grep "pts /"?
Martincho
2

Pour les lister:

ps aux | awk '{print $7}' | grep -v "?"

Pour les compter:

ps aux | awk '{print $7}' | grep -v "?" | wc -l

Vous devrez soustraire 1 de ce nombre car il inclut l'en-tête TTY supérieur.

Tout dépend si vous voulez compter le nombre de sous-shells en cours d'exécution ou si vous voulez compter le nombre de fenêtres de terminal ouvertes.

Pour compter uniquement les fenêtres de terminal, vous devez utiliser:

ls /dev/pts/ | wc -l (stated in a previous answer)

Par exemple:

Sur mon système, il y a actuellement six tty disponibles. J'ai également un terminal ouvert pts / 0 qui a 4 processus en cours d'exécution dans le fg ou le 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

Si vous souhaitez supprimer les processus enfants d'arrière-plan, il vous suffit de diriger vers uniq:

ps aux | awk '{print $7}' | grep -v "?" | uniq | wc -l

Vous devez toujours soustraire 1 pour le titre d'en-tête de TTY, mais vous pouvez encore améliorer cela en supprimant complètement le tty car il semble que vous ne vous en souciez pas de toute façon.

ps aux | awk '{print $7}' | grep -v "?" | grep -vi "tty*" | uniq

Cela vous donnera un décompte précis.

ÉDITER

En y pensant plus, «ps -a» fonctionnerait mieux et vous pouvez laisser de côté le premier grep.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
la source
grepet awkest redondant, utilisez awk '/pattern/; et cela ne fonctionne pas sur ma machine - il rapporte 19 quand j'en ai 1.
jasonwryan
Je suis un peu confus. En ce moment, je suis sur Ubuntu 14. Il n'y a qu'une seule fenêtre terminal / bash ouverte. Avec les commandes abobe, j'obtiens 23 ou 13, quand je devrais obtenir 1 ou 2 au cas où j'ouvrirais un autre terminal avec ctrl-alt-t
Martincho
Cette première commande compte les processus enfants s'exécutant dans des shells en arrière-plan et pas seulement les sessions terminales ouvertes
Jeight
@jasonwryan - Cela fonctionne très bien sur le mien. Utiliser grep avec awk est la préférence de la personne. Si quelqu'un est plus à l'aise de faire le tout en awk, c'est bien.
Jeight
"Cela fonctionne très bien sur le mien" ne justifie guère votre réponse ... Peut-être pourriez-vous inclure quelques détails sur ce qu'est "le vôtre" pour que les gens sachent qu'il ne s'applique qu'à ce système.
jasonwryan
-1

Vous pourriez faire $ pgrep bash

entrez la description de l'image ici

Vous pouvez aussi faire $ W

entrez la description de l'image ici

Noajm IsMy Name
la source