我想了解当我们退出Linux时会发生什么(特别是Ubuntu):
>进程最初如何请求/通知注销进程执行注销(通过发送一些信号或其他一些IPC方法)?注销过程运行的程序是什么?请求/通知流程通常运行的程序是什么?
>登出过程会杀死什么进程,什么不进行? (有一些方法可以在登录后立即启动进程,并且他们如何设法做到这一点?使一个没有控制终端的进程似乎是一种方式,但大多数进程都是通过以下方式注销而被杀死的示例没有控制终端)
>注销过程如何杀死这些进程(通过发送一些信号或其他一些IPC手段)?
考虑三种情况:虚拟控制台和桌面环境以及SSH. (前两个是由OS提供的,第三个不是,尽管所有都在用户空间中运行)
>当我登录虚拟控制台时,我得到以下内容
来自登录shell的祖先进程:
1 systemd
721 login
26284 bash
注销后,进程721登录及以下消失.
>在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之后:
$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开始到
下面消失了.
谢谢.
解决方法:
我不知道如何在OS注销过程中涉及systemd(特别是/usr/lib / systemd / systemd-logind).
以下是我的部分答案:
> The login process wait() on the login shell process,当登录shell退出时,登录将接收SIGCHLD并唤醒以恢复其执行,这也将退出.
>似乎a logout request program如lxsession-logout sends SIGTERM to the lxsession process(我说“似乎”因为我不太了解源代码).我不知道lxsession如何回应SIGTERM以及为什么它的后代也会死,如I can’t find its disposition.我不知道为什么父母lightdm,lxsession的27302也死了,并猜测the parent lightdm,27302 may wait() on lxsession and die once wake up.
>我不知道当我退出SSH时会发生什么.我猜它类似于CLI登录(案例1),sshd,22979可能会等待bash,22980并且死亡.但我真的不知道为什么有这么多的sshd进程.
标签:linux,ubuntu,process,logout,signals
来源: https://codeday.me/bug/20190814/1650489.html