Я не знаю, как systemd (, особенно /usr/lib/systemd/systemd-logind
), участвует в процессе выхода из ОС.
Ниже приведены мои частичные ответы:
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
процессов.
После некоторых тестов и рассмотрения определения этих уровней разница заключается в том, что тип ALPHABETIC
фиксируется на втором уровне с помощью CAPS LOCK , в то время как не ALPHABETIC
второй уровень достигается только нажимая SHIFT .
См. следующий раздел /usr/share/X11/xkb/types/level5
. Только в ALPHABETIC
можно найти map[Lock] = Level2;
, map[Lock+LevelFive] = Level6;
и так далее...
type "EIGHT_LEVEL" {
modifiers = Shift+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};
type "EIGHT_LEVEL_ALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] = Level4;
map[Lock+Shift+LevelThree] = Level3;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] = Level8;
map[Lock+Shift+LevelThree+LevelFive] = Level7;
level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";
};