Linux(特にUbuntu)からログアウトすると、何が起こるのか理解しようとしています。
プロセスは、最初にログアウトを実行するためにログアウトプロセスにどのように要求/通知しますか(一部の信号または他のIPC方式を送信することによって)ログアウトプロセスではどのプログラムが実行されますか?リクエスト/通知プロセスは通常どのプログラムを実行しますか?
プロセスをログオフすると、どのプロセスが終了し、どのプロセスが終了しませんか? (ログイン後にプロセスを開始し、ログアウト後も保持する方法はいくつかありますが、どうすればよいですか?終了します)
ログアウトプロセスはこれらのプロセスをどのように終了できますか?
仮想コンソール、デスクトップ環境、SSHという3つのシナリオを考えてみましょう。 (最初の2つはオペレーティングシステムによって提供され、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
以下から始まるすべてのプロセスが消えます。
ありがとうございます。
答え1
/usr/lib/systemd/systemd-logind
OSログアウトプロセスにsystemd(特に)がどのように関与しているかわかりません。
私の答えのいくつかは次のとおりです。
The login
wait()
プロセスのログインシェルプロセス、ログインシェルが終了したら、受信して起動し、login
実行SIGCHLD
を再開します。つまり、終了します。そうだログアウトリクエスタ例えば
lxsession-logout
プロセスSIGTERM
に送信lxsession
(私はソースコードをよく理解していないので「〜のようだ」と言います。)その子孫がどうlxsession
反応したのSIGTERM
か、なぜ死んだのかわかりません。構成が見つかりません。私たちの両親lightdm,27302
もなぜlxsession
亡くなったのかわかりません。目が覚めた後、両親が死亡するlightdm,27302
可能性がありますwait()
lxsession
。SSHを終了した後に何が起こるのかわかりません。私はCLIログイン(ケース1)と似ているようですが、待って死ぬ
sshd,22979
ことがあります。bash,22980
しかし、なぜこのようなプロセスが多いのかわかりませんsshd
。
答え2
覚えておいてください。私はすべての詳細を教えても、あなたは理解できないからです。私はまた、あなたがすべての概念に精通しているわけではないことを知っていますが、マンページを読むのは役に立ちます。
プロセスは、最初にログアウトを実行するためにログアウトプロセスにどのように要求/通知しますか(一部の信号または他のIPC方式を送信することによって)ログアウトプロセスではどのプログラムが実行されますか?リクエスト/通知プロセスは通常どのプログラムを実行しますか?
「ログアウトプロセス」が「セッションマネージャ」を意味すると仮定します。 .IPClogind
が/usr/lib/systemd/systemd-logind
可能なすべてのプログラムlogind
。
プロセスをログオフすると、どのプロセスが終了し、どのプロセスが終了しませんか? (ログイン後にプロセスを開始し、ログアウト後も保持する方法はいくつかありますが、どうすればよいですか?終了します)
そのセッション内のプロセスが終了し、これがユーザーの最後のセッションであり、ユーザーが延期を有効にしていない場合は、ユーザー全体のフラグメントが削除されます。殺さないことで。logind
このカーネル機能は使用されていないため、端末制御とはほとんど関係ありません。
ログアウトプロセスはこれらのプロセスをどのように終了できますか?
単位ファイルとシグナルに事前定義された操作を含む複雑なロジック。
1,2,3プロセスツリービューが機能しません。logind
これを気にしないでください。デフォルトでは、システムスタイルサービスとセッション管理はcgroupです。望むよりsystemctl status
。