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.
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.
Antworten:
ls /dev/pts/ | wc -l
Verwenden Sie den obigen Befehl, um die geöffneten Terminalfenster zu zählen.
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
grep
und awk
ist redundant, verwenden awk '/pattern/
; und das funktioniert nicht auf meiner Maschine - es meldet 19, wenn ich 1. habe
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
expect
emulierte Benutzersitzung, diexterm
keine Shell ausführt usw.?