当我尝试关闭logind
会话(通过注销)时,会话下的一些进程仍在运行,阻止其正常终止,导致[email protected]
两者都无法终止。我听说后者是一种预期行为(希望某些单元保持运行),但我认为让会话保持运行并不是实现这一目标的正确方法。此外,当我手动终止会话时,也会终止[email protected]
,因此这几乎看起来像是延迟会话是用于此目的。
systemd-cgls
为了说明我的意思,这是我正常登录时(即现在)的部分输出:
Control group /:
-.slice
└─user.slice
└─user-1000.slice
├─[email protected]
│ └─ //various units listed; removed for brevity
└─session-c8.scope
├─4883 login -- sammko
├─4905 /usr/bin/gnome-keyring-daemon --daemonize --login
└─ //various other processes listed; removed for brevity
输出完全符合预期。退出会话后:
Control group /:
-.slice
└─user.slice
└─user-1000.slice
├─[email protected]
│ └─ //various units listed; removed for brevity
└─session-c8.scope
└─4905 /usr/bin/gnome-keyring-daemon --daemonize --login
gnome-keyring-daemon
以某种方式存活下来,保持会话处于活动状态。如果我们现在运行loginctl show-session c8
,我们会State=closing
在输出中找到。如果我们继续,我们kill -HUP 4905
会发现进程和会话终止,整个进程也随之终止。如果我们继续,进程也会终止。这让我想到不会忽略信号,或类似的东西。如果进程需要两次信号才能真正关闭,我在注销之前尝试了两次,进程也终止了。user-uid.slice
kill -TERM 4905
gnome-keyring-daemon
kill -HUP 4905
我的印象是 systemd 尝试使用 来终止进程SIGHUP
,而gnome-keyring-daemon
通常会做出相应的响应。(我也曾使用过gpg-agent
linger ,它成功忽略了SIGHUP
。但那是另一个故事。)
我的问题是:为什么gnome-keyring-daemon
注销后仍无明显原因地继续运行,除了启用之外,如何解决此问题KillUserProcesses
。
另外,请注意,这个问题与systemd-230