Jak policzyć, ile uruchomionych jest powłok / terminali?

10

Próbuję policzyć, ile okien powłoki lub terminala jest aktualnie uruchomionych.

próbowałem ps a|grep bash; ps a|grep tty;

Ale może być niedokładne.

Martincho
źródło
Jaka jest twoja definicja okna terminala ? Czy liczy się karta terminal-gnome, terminal wirtualny, osoba logująca się przez ssh, panel screen / tmux, expectemulowana sesja użytkownika, xtermbrak uruchomionej powłoki itp.?
Stéphane Chazelas
1
Okno terminalu otwarte za pomocą „ctrl-alt-t”. Rozwiązałem to, policząc ile „pts” jest w> kto dowodzi kim | grep "pts" | wc-l
Martincho

Odpowiedzi:

6
ls /dev/pts/  | wc -l

Użyj powyższego polecenia, aby policzyć otwarte okna terminala.

Ramesh
źródło
Próbowałem tego. Pokazuje 23. I mam tylko jedno otwarte okno terminalu / bash.
Martincho
@ user68957 Czy przypadkiem używasz wspólnego komputera z wieloma użytkownikami?
Chirag Bhatia - chirag64
Jeden komputer domowy, jeden użytkownik naraz. Sztuką byłoby policzyć, ile okien terminali jest otwartych lub procesów terminalowych. Jeśli zrobię> kto, wyświetli to listę dwóch użytkowników: 0 rrrr-mm-dd gg-mm (: 0) me pts / 0 rrrr-mm-dd gg-mm (: 0) Jeśli otworzę inne okno terminala, z > kto to pokazuje: ja: 0 rrrr-mm-dd gg-mm (: 0) me pts / 0 rrrr-mm-dd gg-mm (: 0) me pts / 1 rrrr-mm-dd gg-mm (: 0) Czy powinienem po prostu grepować „pts /”?
Martincho
2

Aby je wymienić:

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

Aby je policzyć:

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

Musisz odjąć 1 od tego numeru, ponieważ zawiera on górny nagłówek TTY.

Wszystko zależy od tego, czy chcesz policzyć, ile jest uruchomionych podpowłok lub czy chcesz policzyć, ile okien terminala jest otwartych.

Aby policzyć tylko okna terminali, musisz użyć:

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

Na przykład:

W moim systemie dostępnych jest obecnie sześć tty. Mam również jeden terminal otwarty pts / 0, który ma 4 procesy uruchomione w fg lub 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

Jeśli chcesz usunąć procesy potomne w tle, po prostu potokuj do uniq:

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

Nadal musisz odjąć 1 dla tytułu nagłówka TTY, ale możesz to jeszcze poprawić, usuwając tty całkowicie, ponieważ wygląda na to, że i tak nie przejmujesz się tym.

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

To da ci dokładne obliczenie.

EDYTOWAĆ

Myślenie o tym bardziej „ps -a” działałoby lepiej i możesz pominąć pierwsze grep.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
źródło
grepi awkjest zbędny, użyj awk '/pattern/; i to nie działa na moim komputerze - zgłasza 19, gdy mam 1.
jasonwryan
Jestem trochę zmieszany. Obecnie korzystam z Ubuntu 14. Otwarte jest tylko jedno okno terminalu / bash. Z poleceniami abobe dostaję 23 lub 13, kiedy powinienem dostać 1, lub 2 w przypadku, gdy otworzę inny terminal z ctrl-alt-t
Martincho
To pierwsze polecenie zlicza procesy potomne działające w powłokach w tle, a nie tylko otwarte sesje terminalowe
Jeight
@jasonwryan - Działa dobrze na mojej. Używanie grep z awk jest preferencją osoby. Jeśli ktoś jest bardziej komfortowy, robiąc wszystko w awk, to nie ma sprawy.
Jeight
„Działa dobrze w moim przypadku” z trudem potwierdza twoją odpowiedź… Być może mógłbyś podać jakiś szczegół tego, czym jest „twój”, aby ludzie wiedzieli, że dotyczy to tylko tego systemu.
jasonwryan
-1

Mógłbyś $ pgrep bash

wprowadź opis zdjęcia tutaj

Ty też możesz to zrobić $ W

wprowadź opis zdjęcia tutaj

Noajm IsMy Name
źródło