Aquí hay un poco más de información sobre lo que está sucediendo, desde una perspectiva de Unix de nivel inferior. Es largo y va más allá de lo que pediste, pero puede ser interesante para ti u otra persona que pase esta página.
Si mira el w
manual de comandos ( man w
), dice que "la utilidad w imprime un resumen de la actividad actual en el sistema, incluyendo lo que está haciendo cada usuario". Eso es un poco vago y un poco engañoso. Específicamente, lo que w
hace es informarle sobre los inicios de sesión actuales . Los inicios de sesión se registran en un archivo llamado /var/run/utmpx
. Existen métodos de biblioteca comunes para actualizar utmpx
entradas, de modo que cada programa que necesita registrar o eliminar un inicio de sesión utiliza el mismo procedimiento.
w
lee el utmpx
archivo utilizando esas rutinas de biblioteca comunes y muestra información sobre las sesiones de inicio de sesión actuales, junto con el proceso en primer plano . Una sesión de inicio de sesión puede hacer muchas cosas a la vez, pero solo un programa está en primer plano. Todos los demás son antecedentes, que es lo que sucede cuando coloca un &
comando o presiona control-Z
mientras se ejecuta un programa en una terminal.
Se crea una sesión de inicio de sesión cuando inicia sesión en su computadora en la pantalla integrada. Si tiene habilitado el cambio de usuario, se registra un inicio de sesión para cada usuario y permanece activo hasta que finaliza la sesión. Y si inicia sesión remotamente (por ejemplo, con ssh
), se registra un inicio de sesión para eso. Cada uno de estos debería aparecer en w
la salida de.
La mayoría de las aplicaciones de terminal, incluidas Terminal.app e iTerm, así como xterm
si está utilizando X11.app, pueden crear shells de inicio de sesión en una ventana o pestaña. Cuando crea una nueva ventana en una de estas aplicaciones, puede obtener otra sesión de inicio de sesión, que aparece como otra línea w
. ¡Pero estas aplicaciones no necesariamente crean shells de inicio de sesión! Si una nueva ventana / pestaña es un shell de inicio de sesión generalmente se controla en las preferencias. Por ejemplo, en iTerm2, puede elegir en Preferencias> Perfiles> General> Comando si desea iniciar un shell de inicio de sesión o algún otro programa. Si solo pones "bash" allí, obtendrás un shell, pero no será un shell de inicio de sesión .
Entonces, ¿cuál es la diferencia? Es sutil, pero útil saberlo.
Aquí hay una buena discusión sobre shells de inicio de sesión versus shells regulares: https://unix.stackexchange.com/questions/38175/difference-between-login-shell-and-non-login-shell . Pero podemos resumir como: un shell de inicio de sesión se inicia como el primer proceso después de que algo configura un inicio de sesión utmpx
. Cualquier programa puede ejecutar un shell sin inicio de sesión en cualquier momento, pero no es el primer proceso después de una entrada utmpx
. (Más técnicamente, un shell de inicio de sesión es el proceso principal en un grupo de procesos. El hecho de que generalmente tenga una utmpx
entrada es descriptivo, no necesario).
Si su shell es bash
, como la mayoría, cada instancia de él lee y ejecuta el .bashrc
archivo. Cuando se bash
ejecuta como un shell de inicio de sesión, también lee y ejecuta los archivos .bash_profile
y .profile
. Esos archivos pueden contener instrucciones que deberían ocurrir solo para todas las sesiones nuevas. Eso es lo más práctico que debes saber sobre los shells de inicio de sesión. Eso, y los shells de inicio de sesión aparecen en w
.
Aquí hay un experimento para ilustrar. Abra una nueva ventana de Terminal y ejecute w
. Deberías ver algo como:
11:57 up 7 days, 59 mins, 5 users, load averages: 3.58 3.53 3.91
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:57 - w
s000
es el nombre del terminal en el que se está ejecutando w
. Existe en el sistema de archivos en /dev/ttys000
. Por lo general, existe una relación uno a uno entre shells de inicio de sesión y terminales, pero no siempre.
Ahora abra una nueva ventana de Terminal. Vuelve al primero y corre de w
nuevo.
12:09 up 7 days, 1:11, 5 users, load averages: 5.35 4.35 4.05
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:38 - w
dgc s001 - 11:57 - -bash
Verá un nuevo inicio de sesión en s001
- /dev/ttys001
- que se está ejecutando -bash
. Ese guión al principio es una convención que le dice que bash se está ejecutando como un shell de inicio de sesión. No hay un programa en primer plano en ese terminal, por lo que le w
muestra el shell en sí.
Ahora vuelve a tu segunda ventana y corre bash
. ¿Qué esperas que pase?
12:13 up 7 days, 1:14, 5 users, load averages: 5.61 5.07 4.41
USER TTY FROM LOGIN@ IDLE WHAT
dgc console - 16Aug18 7days -
dgc s000 - 11:38 - w
dgc s001 - 11:57 - bash
El guión se ha ido. Esto se debe a que la misma sesión de inicio de sesión (terminal) ahora se está ejecutando, en primer plano, un shell que no es un shell de inicio de sesión. Es un hijo del original -bash
. Si voltea hacia atrás y escribe exit
para salir de la fiesta infantil, verá de -bash
nuevo.
Finalmente, tenga en cuenta el console
inicio de sesión. Ese nunca cambiará en el uso ordinario. Por lo general, ejecuta el sistema de escritorio / ventana. Si enciende su Mac y no inicia sesión, pero luego inicia sesión ssh
desde otra computadora, no verá esa línea en absoluto. Siempre aparecerá inactivo y siempre parecerá que no se está ejecutando nada, excepto con el guión, porque es una sesión de inicio de sesión.
Cuando un programa que creó una sesión de inicio de sesión finaliza ese inicio de sesión, vuelve y elimina la entrada del utmpx
uso de los métodos de biblioteca comunes para ello. Y debido a que utmpx
reside en el /var/run
directorio, se elimina automáticamente cada vez que se reinicia su computadora, por lo que si de repente apaga su Mac mientras está conectado, no continuará viendo inicios de sesión falsos para siempre.
Si es normal Si usa un multiplexor de terminal como tmux o screen, cada 'pestaña' será una sesión de usuario separada.
fuente