login
é encerrado quando seu filho (o shell de login do usuário que efetuou login) é encerrado. Pode até mesmo exec
da criança sem bifurcar-se, substituindo-se, mas ela precisa cuidar da limpeza da sessão do PAM, portanto, ela deve aguardar pelo filho. Uma vez terminada, getty
ou init
(mais geralmente, o processo init) faz mais algumas limpezas ( utmp
etc.) e espera por um novo login (se getty
se substituiu por login
, ou sai quando login
terminar, o processo init iniciará um novo getty
).
Você tem razão, pelo menos no Linux, login
geralmente é usado apenas em consoles virtuais (ou terminais reais conectados por meio de dispositivos seriais). Gerentes de exibição gráfica implementam seus próprios mecanismos de login. Você pode executar login
dentro de um shell de login, por exemplo. em um emulador de terminal, com um pouco de cuidado ( exec login
); há muito tempo atrás, o login
recursivo era usado para alterar usuários, o equivalente a su
hoje em dia.
Note que alguns shells têm um comando logout
, que deve ser usado em vez de exit
para sair de um shell de login; Em tais shells, exit
normalmente não sairão de um shell de login.