¿Cómo contar cuántos shell / terminales se están ejecutando?

10

Estoy tratando de contar cuántas ventanas de shell o terminal se están ejecutando actualmente.

Lo intenté ps a|grep bash; ps a|grep tty;

Pero puede ser inexacto.

Martincho
fuente
¿Cuál es su definición de ventana de terminal ? ¿Cuenta una pestaña gnome-terminal, una terminal virtual, una persona que inicia sesión a través de ssh, un panel screen / tmux, expectuna sesión de usuario emulada, que xtermno ejecuta un shell, etc.?
Stéphane Chazelas
1
Ventana de terminal abierta con "ctrl-alt-t". Lo resolví contando cuántos "pts" hay en> quién manda quién | grep "pts" | wc -l
Martincho

Respuestas:

6
ls /dev/pts/  | wc -l

Use el comando anterior para contar las ventanas de terminal abiertas.

Ramesh
fuente
Intenté eso. Muestra 23. Y solo tengo una ventana de terminal / bash abierta.
Martincho
@ user68957 ¿Está usted en una computadora compartida con múltiples usuarios por casualidad?
Chirag Bhatia - chirag64
Una computadora en casa, un usuario a la vez. El truco sería contar cuántas ventanas de terminal están abiertas o procesos de terminal. Si hago un> who, me enumera dos usuarios: 0 aaaa-mm-dd hh-mm (: 0) me pts / 0 aaaa-mm-dd hh-mm (: 0) Si abro otra ventana de terminal, con > a quién muestra: yo: 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) ¿Debería simplemente grep "pts /"?
Martincho
2

Para enumerarlos:

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

Para contarlos:

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

Deberá restar 1 de ese número, ya que incluye el encabezado TTY superior.

Todo esto depende si desea contar cuántos sub shells se están ejecutando o si desea contar cuántas ventanas de terminal están abiertas.

Para contar solo las ventanas de terminal que necesitaría usar:

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

Por ejemplo:

En mi sistema actualmente hay seis tty's disponibles. También tengo un terminal abierto pts / 0 que tiene 4 procesos ejecutándose en fg o 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

Si desea eliminar los procesos secundarios en segundo plano, simplemente canalice a uniq:

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

Todavía tiene que restar 1 para el título del encabezado de TTY, pero puede mejorar aún más si elimina los tty por completo, ya que parece que de todos modos no le importan.

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

Eso te dará un conteo exacto.

EDITAR

Pensando en ello más 'ps -a' funcionaría mejor y puede omitir el primer grep.

ps a | awk '{print $2}' | grep -vi "tty*" | uniq | wc -l
Jeight
fuente
grepy awkes redundante, uso awk '/pattern/; y esto no funciona en mi máquina - informa 19 cuando tengo 1.
jasonwryan
Estoy un poco confundido. En este momento, estoy en Ubuntu 14. Solo hay una ventana de terminal / bash abierta. Con los comandos abobe, obtengo 23 o 13, cuando debería obtener 1 o 2 en caso de que abra otra terminal con ctrl-alt-t
Martincho
Ese primer comando cuenta los procesos
secundarios que se
@jasonwryan: funciona bien en el mío. Usar grep con awk es preferencia de la persona. Si alguien se siente más cómodo haciendo todo en awk, entonces está bien.
Jeight
"Funciona bien en la mía" apenas confirma su respuesta ... Tal vez podría incluir algunos detalles de lo que es "suyo" para que la gente sepa que solo se aplica a ese sistema.
jasonwryan
0

En macos puedes usar:

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

Encontrado aquí: /programming//a/6180547/6320039

Ulysse BN
fuente
-1

Podrías hacerlo $ pgrep bash

ingrese la descripción de la imagen aquí

También puedes hacer $ W

ingrese la descripción de la imagen aquí

Noajm esMi nombre
fuente