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
等)是否一定会导致注销操作系统?
我还想问一下退出操作系统是什么意思?
谢谢。
答案1
换句话说bash
,“登录 shell”是指使用标志调用的 shell -l
,或者参数 0 的第一个字符以 开头的 shell -
。 (参见man bash
“调用”部分)。
在您的示例中,您可以看到进程 31728 被调用-bash
,因此以 a 开头-
,因此被作为登录 shell 调用。
logout
只需退出登录 shell。
因此,如果您运行bash -l
,logout
您会发现自己回到了调用 shell。
$ echo $$
32145
$ bash -l
bash-4.2$ logout
$ echo $$
32145
现在login
程序(示例中的进程 30488)等待子 shell 退出,然后执行一些清理操作(例如wtmp
、utmp
),然后退出。这就是为什么您在运行后不再看到此进程的原因logout
。