退出登录 shell 是否一定会退出操作系统?

退出登录 shell 是否一定会退出操作系统?

Bash 手册说

logout [n]

退出登录 shell,向该 shell 的父级返回 n 状态。

在 Ubuntu 的虚拟控制台上,我首先登录,然后在登录 shell 中运行:

$ pstree -paus $$
systemd,1 --system --deserialize 19
  `-login,30488 -p --  
      `-bash,31728,t
          `-pstree,31774 -paus 31728

然后运行logout,从下面开始的所有进程login,30488都会消失,而不仅仅是“返回到shell的父进程”,即进程login

在登录 bash shell 中,bash 内置命令是否logout会退出操作系统,而不仅仅是退出 shell?

退出登录 shell(不一定是通过logout,也可以是任何其他方式,例如内置的 bashexit等)是否一定会导致注销操作系统?

我还想问一下退出操作系统是什么意思?

谢谢。


延伸至:https://stackoverflow.com/questions/53887813/how-does-the-login-program-in-linux-invoke-a-login-shell

答案1

换句话说bash,“登录 shell”是指使用标志调用的 shell -l,或者参数 0 的第一个字符以 开头的 shell -。 (参见man bash“调用”部分)。

在您的示例中,您可以看到进程 31728 被调用-bash,因此以 a 开头-,因此被作为登录 shell 调用。

logout只需退出登录 shell。

因此,如果您运行bash -llogout您会发现自己回到了调用 shell。

$ echo $$
32145
$ bash -l
bash-4.2$ logout
$ echo $$
32145

现在login程序(示例中的进程 30488)等待子 shell 退出,然后执行一些清理操作(例如wtmputmp),然后退出。这就是为什么您在运行后不再看到此进程的原因logout

相关内容