Bashのマニュアルによると
logout [n]
ログインシェルを終了し、n 状態をシェルの親に返します。
Ubuntuの仮想コンソールで最初にログインし、ログインシェルで実行します。
$ pstree -paus $$
systemd,1 --system --deserialize 19
`-login,30488 -p --
`-bash,31728,t
`-pstree,31774 -paus 31728
その後、実行すると、「シェルに返される親プロセス」であるプロセスだけでなく、logout
下から始まるすべてのプロセスも消えます。login,30488
login
bashシェルにログインすると、bash組み込みコマンドはシェルだけlogout
でなくオペレーティングシステムもシャットダウンしますか?
ログインシェルを終了すると(必ずlogout
組み込みのbashexit
などの他の手段を介しても可能)、必ずオペレーティングシステムからログアウトされますか?
また、オペレーティングシステムをシャットダウンすることが何を意味するのか尋ねたいと思います。
ありがとうございます。
答え1
つまりbash
、「ログインシェル」は、フラグで呼び出されるシェル-l
または引数0の最初の文字で始まるシェルです-
。 (man bash
「通話」セクションを参照)
-bash
あなたの例では、プロセス31728が呼び出され、aで始まるので、-
ログインシェルとして呼び出されることがわかります。
logout
ログインシェルを終了します。
したがって、を実行するとbash -l
呼び出しlogout
シェルに戻ります。
$ echo $$
32145
$ bash -l
bash-4.2$ logout
$ echo $$
32145
login
プログラム(例のプロセス30488)は、サブシェルが終了するのを待ってから、いくつかのクリーンアップ操作(例:)wtmp
をutmp
実行してから終了します。これが、このプロセスを実行した直後にこのプロセスが表示されなくなる理由ですlogout
。