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.


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.


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

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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.