Como contar quantos shell / terminais estão em execução?

10

Estou tentando contar quantas janelas de shell ou terminal estão em execução no momento.

eu tentei ps a|grep bash; ps a|grep tty;

Mas pode ser impreciso.

Martincho
fonte
Qual é a sua definição de janela de terminal ? Uma guia gnome-terminal, terminal virtual, pessoa que está acessando o ssh, painel screen / tmux, expectsessão de usuário emulado, xtermnão executando um shell, etc. conta?
Stéphane Chazelas
1
A janela do terminal foi aberta com "ctrl-alt-t". Eu o resolvi contando quantos "pts" existem em> quem comanda quem | grep "pts" | wc -l
Martincho

Respostas:

6
ls /dev/pts/  | wc -l

Use o comando acima para contar as janelas do terminal abertas.

Ramesh
fonte
Tentei isso. Mostra 23. E eu tenho apenas uma janela de terminal / bash aberta.
Martincho 29/05
@ user68957 Você está em um computador compartilhado com vários usuários, por acaso?
Chirag Bhatia # chirag64
Um computador doméstico, um usuário por vez. O truque seria contar quantas janelas de terminal estão abertas ou processos de terminal. Se eu fizer um> quem, ele listará dois usuários comigo: 0 aaaa-mm-dd hh-mm (: 0) me pts / 0 aaaa-mm-dd hh-mm (: 0) Se eu abrir outra janela do terminal, com > quem mostra: me: 0 aaaa-mm-dd hh-mm (: 0) me pts / 0 aaaa-mm-dd hh-mm (: 0) me pts / 1 aaaa-mm-dd hh-mm (: 0) Devo apenas grep "pts /"?
Martincho 29/05
2

Para listá-los:

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

Para contá-los:

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

Você precisará subtrair 1 desse número, pois inclui o cabeçalho TTY superior.

Tudo isso depende se você deseja contar quantas subcascas estão em execução ou se deseja contar quantas janelas de terminal estão abertas.

Para contar apenas as janelas do terminal, você precisaria usar:

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

Por exemplo:

No meu sistema, atualmente existem seis ttys disponíveis. Eu também tenho um terminal aberto pts / 0 que tem 4 processos em execução no fg ou 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

Se você deseja remover os processos filho em segundo plano, basta canalizar para uniq:

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

Você ainda precisa subtrair 1 para o título do cabeçalho de TTY, mas pode melhorar ainda mais removendo os ttys completamente, pois parece que não se importa com eles.

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

Isso lhe dará uma contagem precisa.

EDITAR

Pensando nisso, mais 'ps -a' funcionaria melhor e você pode deixar de fora o primeiro grep.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
fonte
grepe awké redundante, use awk '/pattern/; e isso não funciona na minha máquina - ele relata 19 quando tenho 1.
jasonwryan
Eu estou um pouco confuso. No momento, estou no Ubuntu 14. Existe apenas uma janela de terminal / bash aberta. Com os comandos Abobe, fico com 23 ou 13 anos, quando eu deveria ter 1 ou 2 no caso de eu abrir outro terminal com ctrl-alt-t
Martincho
Que as primeiras contagens de comando processos de crianças correndo em conchas no fundo e não apenas aberta sessões de terminal
Jeight
@jasonwryan - Funciona muito bem no meu. Usar grep com awk é a preferência da pessoa. Se alguém está mais confortável fazendo a coisa toda no awk, tudo bem.
Jeight 29/05
"Funciona bem na minha" dificilmente substancia sua resposta ... Talvez você possa incluir alguns detalhes do que é "seu" para que as pessoas saibam que isso só se aplica a esse sistema.
Jasonwryan
0

No macos você pode usar:

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

Encontrado aqui: /programming//a/6180547/6320039

Ulysse BN
fonte
-1

Você poderia fazer $ pgrep bash

insira a descrição da imagem aqui

Você também pode fazer $ W

insira a descrição da imagem aqui

Noajm IsMy Name
fonte