我是 Linux 新手。我搜索了如何安全地注销其他用户,并找到了一些解决方案,但我想知道它们内部是如何工作的。我有几个问题:
1.pkill -KILL -u {username}
它是否只向 init --user 的每个子进程发送 SIGKILL?它是否确保每个子进程都被安全杀死?
2. 是否可以通过仅发送信号来实现?
附言 我有一个程序为其他用户创建了 init --user,我使用 SIGTERM 终止了该程序,但有时 compiz 会崩溃。这就是为什么我很想知道它应该如何正常工作。
答案1
pkill -KILL -u {username}
它是否仅向 init --user? 的每个子进程发送 SIGKILL 并且确保每个子进程都被安全终止?
它会向该帐户拥有的所有进程发送 SIGKILL {username}
,无论其父进程是谁。(请注意,“init --user”在某种程度上是特定于发行版的。)
但是,这与“安全”相去甚远。SIGKILL 是一种强力方法,它会终止所有进程,而不会让它们正常关闭和清理;它与“安全”背道而驰。
许多基于终端的程序对 SIGHUP 的反应是“线路挂断”。几秒钟后,其余程序可以用 SIGTERM 停止。只有这样,如果在 SIGHUP 和 SIGTERM 之后仍有剩余,则应该使用 SIGKILL 作为最终方法。
- 可以通过发送信号来完成吗?
可能——大多数程序都能理解 SIGHUP 或 SIGTERM。但图形程序可能更喜欢通过会话管理器即通过 gnome-session,使用 ICE/XSMP(我不知道它具体是如何工作的)。一般来说,“最安全”的方法是使用桌面环境的 logoff 命令;例如:
gnome-session-quit --logout --force --no-prompt
gnome-session-save --force-logout --silent
qdbus org.kde.ksmserver /KSMServer logout 0 -1 -1
qdbus org.razorqt.session /RazorSession logout
mate-session-save --logout
xfce4-session-logout --logout