web-dev-qa-db-ja.com

Linuxからのログアウトに耐えられるプロセスはどれですか。

Linuxからログアウトしたときに何が起こるかを理解しようとしています(特にUbuntu)。

  • プロセスは最初にどのようにログアウトプロセスにログアウトプロセスを要求/通知します(いくつかのシグナルまたはその他のIPCの意味)を送信することによって)?ログアウトプロセスによって実行されるプログラムとは?何通常、プログラムは要求/通知プロセスによって実行されますか?

  • ログアウトプロセスはどのプロセスを強制終了しますか? (ログイン後に開始されたプロセスをログアウト後も存続させる方法があり、それらをどうやって管理するのですか?制御端末を持たないプロセスを作成することは1つの方法のようですが、ほとんどのプロセスは以下でログアウトすることで強制終了されます例には制御端末がありません)

  • ログアウトプロセスはこれらのプロセスをどのようにして殺しますか(いくつかのシグナルまたは他のIPCの意味)を送信することによって)?

仮想コンソールおよびデスクトップ環境とSSHの3つのケースを検討してください。 (最初の2つはOSによって提供され、3つ目は提供されませんが、すべてがユーザー空間で実行されています)

  1. 仮想コンソールにログインすると、ログインシェルから次の祖先プロセスが表示されます。

    1 systemd
    721 login
    26284 bash
    

    ログアウト後、721 login以下のプロセスが消えます。

  2. 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以下のプロセスが消えます。

  3. 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から以下のすべてのプロセスが消えます。

ありがとう。

7
Tim

Systemd(特に/usr/lib/systemd/systemd-logind)がOSのログアウトプロセスにどのように関与しているかはわかりません。

以下は私の部分的な答えです:

  1. The login process wait() on the login Shell process 、そしてログインシェルが終了すると、loginSIGCHLDを受け取り、ウェイクアップしてその実行を再開します。これも終了します。

  2. ログアウトリクエストプログラム のようなlxsession-logoutSIGTERMlxsessionプロセスに送信 (ソースコードがよくわからないので、「思われる」と言いました)。 lxsessionSIGTERMにどのように応答するか、そしてその子孫もなぜ死ぬのか 私はその性質を見つけることができません のように私は知りません。 lxsessionの親lightdm,27302もなぜ死ぬのかわかりません lightdm,27302lxsessionwait()を実行し、ウェイクアップすると死ぬかもしれません

  3. SSHからログアウトするとどうなるかわかりません。私はそれがCLIログイン(ケース1)に類似していると思います、sshd,22979bash,22980を待って死ぬかもしれません。しかし、なぜsshdプロセスがこんなにたくさんあるのか、本当にわかりません。

1
Tim