Linuxからログアウトしたときに何が起こるかを理解しようとしています(特にUbuntu)。
プロセスは最初にどのようにログアウトプロセスにログアウトプロセスを要求/通知します(いくつかのシグナルまたはその他のIPCの意味)を送信することによって)?ログアウトプロセスによって実行されるプログラムとは?何通常、プログラムは要求/通知プロセスによって実行されますか?
ログアウトプロセスはどのプロセスを強制終了しますか? (ログイン後に開始されたプロセスをログアウト後も存続させる方法があり、それらをどうやって管理するのですか?制御端末を持たないプロセスを作成することは1つの方法のようですが、ほとんどのプロセスは以下でログアウトすることで強制終了されます例には制御端末がありません)
ログアウトプロセスはこれらのプロセスをどのようにして殺しますか(いくつかのシグナルまたは他のIPCの意味)を送信することによって)?
仮想コンソールおよびデスクトップ環境とSSHの3つのケースを検討してください。 (最初の2つはOSによって提供され、3つ目は提供されませんが、すべてがユーザー空間で実行されています)
仮想コンソールにログインすると、ログインシェルから次の祖先プロセスが表示されます。
1 systemd
721 login
26284 bash
ログアウト後、721 login
以下のプロセスが消えます。
Lubuntu 18.04で、lightdmとLXDEにログインし、デスクトップのパネルからlxterminalを実行して、lxterminalウィンドウの次のコマンドから祖先プロセスを取得します。
$ ps -paus $$
systemd,1 --system --deserialize 19
`-lightdm,661
`-lightdm,27302 --session-child 13 24
`-lxsession,27309,testme -s Lubuntu -e LXDE
`-lxpanel,27399 --profile Lubuntu
`-lxterminal,27565
`-bash,27568
`-pstree,27594 -paus 27568
ログアウトすると、lightdm,27302
以下のプロセスが消えます。
Lubuntu 18.04にsshした後:
$ pstree -a -p -s $$
systemd,1 --system --deserialize 19
└─sshd,669 -D
└─sshd,22838
└─sshd,22979
└─bash,22980
└─pstree,30610 -a -p -s 22980
ログアウト後、sshd,22838
から以下のすべてのプロセスが消えます。
ありがとう。
Systemd(特に/usr/lib/systemd/systemd-logind
)がOSのログアウトプロセスにどのように関与しているかはわかりません。
以下は私の部分的な答えです:
The login
process wait()
on the login Shell process 、そしてログインシェルが終了すると、login
はSIGCHLD
を受け取り、ウェイクアップしてその実行を再開します。これも終了します。
ログアウトリクエストプログラム のようなlxsession-logout
SIGTERM
をlxsession
プロセスに送信 (ソースコードがよくわからないので、「思われる」と言いました)。 lxsession
がSIGTERM
にどのように応答するか、そしてその子孫もなぜ死ぬのか 私はその性質を見つけることができません のように私は知りません。 lxsession
の親lightdm,27302
もなぜ死ぬのかわかりません 親lightdm,27302
はlxsession
でwait()
を実行し、ウェイクアップすると死ぬかもしれません 。
SSHからログアウトするとどうなるかわかりません。私はそれがCLIログイン(ケース1)に類似していると思います、sshd,22979
はbash,22980
を待って死ぬかもしれません。しかし、なぜsshd
プロセスがこんなにたくさんあるのか、本当にわかりません。