login当它的子进程(登录用户的登录 shell)终止时终止。它甚至可以exec不用分叉,替换自己的孩子,但它需要照顾 PAM 会话清理,所以它必须等待它的孩子。一旦它终止,getty或者init(更一般地,init 进程)做一些更多的清理(utmp等等)并等待新的登录(如果getty用 替换自己login,或者在login终止时退出,init 进程将启动一个新的getty)。
你是对的,至少在 Linux 下,login通常只在虚拟控制台(或通过串行设备连接的真实终端)上使用。图形显示管理器实现自己的登录机制。您可以login在登录 shell 中运行,例如在终端模拟器中运行,只需小心 ( exec login);很久以前,递归login被用来改变用户,相当于su现在。
请注意,某些 shell 确实有一个logout命令,应该用来代替exit退出登录 shell;在这样的 shell 中,exit通常不会从登录 shell 退出。