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.