Wie kann gezählt werden, wie viele Shell / Terminals ausgeführt werden?

10

Ich versuche zu zählen, wie viele Shell- oder Terminalfenster gerade ausgeführt werden.

Ich habe es versucht ps a|grep bash; ps a|grep tty;

Aber es kann ungenau sein.

Martincho
quelle
Was ist Ihre Definition des Terminalfensters ? Zählen ein Gnome-Terminal-Tab, ein virtuelles Terminal, eine Person, die sich über ssh anmeldet, ein Bildschirm- / tmux-Fenster, eine expectemulierte Benutzersitzung, die xtermkeine Shell ausführt usw.?
Stéphane Chazelas
1
Terminalfenster mit "Strg-Alt-T" geöffnet. Ich habe es gelöst, indem ich gezählt habe, wie viele "Punkte" in> who command who | grep "pts" | wc -l
Martincho

Antworten:

6
ls /dev/pts/  | wc -l

Verwenden Sie den obigen Befehl, um die geöffneten Terminalfenster zu zählen.

Ramesh
quelle
Versuchte das. Es zeigt 23. Und ich habe nur ein Terminal / Bash-Fenster geöffnet.
Martincho
@ user68957 Befinden Sie sich zufällig auf einem gemeinsam genutzten Computer mit mehreren Benutzern?
Chirag Bhatia - chirag64
Ein Heimcomputer, jeweils ein Benutzer. Der Trick wäre zu zählen, wie viele Terminalfenster oder Terminalprozesse geöffnet sind. Wenn ich ein> who mache, werden zwei Benutzer aufgelistet: 0 yyyy-mm-tt hh-mm (: 0) me pts / 0 jjjj-mm-tt hh-mm (: 0) Wenn ich ein anderes Terminalfenster öffne, mit > wen es zeigt: ich: 0 jjjj-mm-tt hh-mm (: 0) ich pts / 0 jjjj-mm-tt hh-mm (: 0) ich pts / 1 jjjj-mm-tt hh-mm (: 0) Soll ich nur "pts /" greifen?
Martincho
2

Um sie aufzulisten:

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

Um sie zu zählen:

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

Sie müssen 1 von dieser Zahl abziehen, da sie den oberen TTY-Header enthält.

Dies hängt alles davon ab, ob Sie zählen möchten, wie viele Sub-Shells ausgeführt werden, oder ob Sie zählen möchten, wie viele Terminalfenster geöffnet sind.

Um nur die Terminalfenster zu zählen, müssten Sie Folgendes verwenden:

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

Beispielsweise:

Auf meinem System sind derzeit sechs tty verfügbar. Ich habe auch ein Terminal offen pts / 0, das 4 Prozesse in der fg oder bg laufen.

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

Wenn Sie die untergeordneten Hintergrundprozesse entfernen möchten, leiten Sie sie einfach an uniq weiter:

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

Sie müssen noch 1 für den Header-Titel von TTY subtrahieren, aber Sie können dies weiter verbessern, indem Sie die Tty's ganz herausnehmen, da es so aussieht, als ob Sie sich sowieso nicht um diese kümmern.

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

Das gibt Ihnen eine genaue Zählung.

BEARBEITEN

Wenn Sie mehr darüber nachdenken, würde 'ps -a' besser funktionieren und Sie können den ersten grep weglassen.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
quelle
grepund awkist redundant, verwenden awk '/pattern/; und das funktioniert nicht auf meiner Maschine - es meldet 19, wenn ich 1. habe
Jasonwryan
Ich bin etwas verwirrt. Im Moment bin ich auf Ubuntu 14. Es ist nur ein Terminal / Bash-Fenster geöffnet. Mit den Abobe-Befehlen erhalte ich 23 oder 13, wenn ich 1 oder 2 erhalten soll, falls ich ein anderes Terminal mit Strg-Alt-T öffne
Martincho
Dieser erste Befehl zählt
untergeordnete
@ Jasonwryan - Es funktioniert gut bei mir. Die Verwendung von grep mit awk ist die Präferenz einer Person. Wenn es jemandem leichter fällt, das Ganze in awk zu machen, ist das in Ordnung.
Jeight
"Bei mir funktioniert es einwandfrei" begründet Ihre Antwort kaum ... Vielleicht könnten Sie einige Details zu "Ihrem" hinzufügen, damit die Leute wissen, dass es nur für dieses System gilt.
Jasonwryan
0

Auf Macos können Sie verwenden:

cnt=$(w -h | grep "^$(whoami) *s[^ ]* *-"|wc -l)
echo "Your current terminal sessions: $cnt"

Hier zu finden: /programming//a/6180547/6320039

Ulysse BN
quelle
-1

Du könntest es tun $ pgrep bash

Geben Sie hier die Bildbeschreibung ein

Das kannst du auch $ W

Geben Sie hier die Bildbeschreibung ein

Noajm IsMy Name
quelle