Как посчитать, сколько запущено оболочки / терминалов?

10

Я пытаюсь подсчитать, сколько окон оболочки или терминала работает в данный момент.

Я старался ps a|grep bash; ps a|grep tty;

Но это может быть неточным.

Martincho
источник
Как вы определяете окно терминала ? Имеют ли значение вкладка gnome-терминал, виртуальный терминал, лицо expect, xtermвыполняющее вход через ssh, панель screen / tmux, эмулируемый сеанс пользователя, отсутствие запуска оболочки и т. Д.?
Стефан Шазелас
1
Окно терминала открывается с помощью "Ctrl-Alt-T". Я решил это, посчитав, сколько «pts» находится в> команде, которая | grep «pts» | wc -l
Martincho

Ответы:

6
ls /dev/pts/  | wc -l

Используйте приведенную выше команду для подсчета открытых окон терминала.

Рамеш
источник
Попробовал это. Это показывает 23. И у меня есть только одно открытое окно терминала / bash.
Мартиньо
@ user68957 Вы случайно не используете общий компьютер с несколькими пользователями?
Чираг Бхатия - чираг64
Один домашний компьютер, один пользователь одновременно. Хитрость заключается в подсчете количества открытых окон терминала или процессов терминала. Если я сделаю a> who, он перечислит двух пользователей me: 0 гггг-мм-дд чч-мм (: 0) me pts / 0 гггг-мм-дд чч-мм (: 0) если я открою другое окно терминала, с > кто это показывает: me: 0 гггг-мм-дд чч-мм (: 0) me pts / 0 гггг-мм-дд чч-мм (: 0) me pts / 1 гггг-мм-дд чч-мм (: 0) Должен ли я просто grep "pts /"?
Мартиньо,
2

Чтобы перечислить их:

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

Чтобы посчитать их:

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

Вам нужно будет вычесть 1 из этого числа, так как оно включает верхний заголовок TTY.

Все зависит от того, хотите ли вы подсчитать, сколько запущено вспомогательных оболочек или если вы хотите подсчитать, сколько окон терминала открыто.

Для подсчета только окон терминала вам необходимо использовать:

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

Например:

В моей системе в настоящее время доступно шесть tty. У меня также есть один открытый терминал pts / 0, в котором запущено 4 процесса в fg или 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

Если вы хотите убрать фоновые дочерние процессы, просто передайте uniq:

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

Вам все еще нужно вычесть 1 для заголовка заголовка TTY, но вы можете еще больше улучшить это, полностью убрав tty, так как кажется, что вас это все равно не волнует.

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

Это даст вам точный счет.

РЕДАКТИРОВАТЬ

Думая об этом, больше «ps -a» будет работать лучше, и вы можете пропустить первый grep.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
источник
grepи awkявляется излишним, использовать awk '/pattern/; и это не работает на моей машине - он сообщает 19, когда у меня есть 1.
jasonwryan
Я немного смущен. Прямо сейчас я нахожусь на Ubuntu 14. Открыто только одно окно терминала / bash. С помощью команд abobe я получаю 23 или 13, когда я должен получить 1 или 2 в случае, если я открою другой терминал с помощью ctrl-alt-t
Martincho
Эта первая команда подсчитывает дочерние процессы, работающие в оболочках в фоновом режиме, а не просто открывающие терминальные сессии
Jeight
@jasonwryan - у меня все отлично работает. Использование grep с awk является предпочтением человека. Если кому-то удобнее делать все это в awk, тогда это нормально.
Джайт
«Это прекрасно работает на моем», вряд ли обосновывает ваш ответ ... Возможно, вы могли бы включить некоторые детали того, что «ваше», чтобы люди знали, что это относится только к этой системе.
Джейсонвриан
-1

Вы могли бы сделать $ pgrep bash

введите описание изображения здесь

Также вы можете сделать $ W

введите описание изображения здесь

Noajm IsMy Name
источник