web-dev-qa-db-ja.com

Linux:ユーザーのログアウトはどのように機能しますか

私はLinuxを初めて使用します。他のユーザーを安全にログアウトする方法を検索しましたが、解決策はほとんど見つかりませんでしたが、内部でどのように機能するかを知りたいです。いくつか質問があります:
1。 pkill -KILL -u {username} init --userのすべての子にSIGKILLを送信するだけですか?そしてそれはすべての子プロセスが安全に殺されることを保証しますか?
2。信号のみを送信して行うことはできますか?

P.S他のユーザーのinit --userを作成するプログラムがあります。SIGTERMを使用して強制終了していますが、compizがクラッシュすることがあります。だから私はそれがどのように正しく機能するのか興味深いです。

4
user590536
  1. pkill -KILL -u {username} init --userのすべての子にSIGKILLを送信するだけですか?そしてそれはすべての子プロセスが安全に殺されることを保証しますか?

親に関係なく、{username}アカウントが所有するすべてのプロセスにSIGKILLを送信します。 (「init--user」はディストリビューション固有であることに注意してください。)

しかし、それはあなたが行くことができる限り「安全」からは程遠いです。 SIGKILLは、すべてのプロセスを適切にシャットダウンおよびクリーンアップせずに終了する強引なアプローチです。それは「安全」の反対です。

多くの端末ベースのプログラムは、SIGHUPに「回線のハングアップ」として反応します。数秒後、残りのものはSIGTERMで停止できます。 その場合のみ SIGHUPとSIGTERMの両方の後にまだ残りがある場合は、最後のアプローチとしてSIGKILLを使用する必要があります。

  1. 信号の送信を使用して実行できますか?

おそらく–ほとんどのプログラムはSIGHUPまたはSIGTERMを理解しています。しかし、グラフィカルプログラムは、ICE/XSMPを使用してセッションマネージャー、つまりgnome-sessionによって停止されることを好む場合があります(これが正確にどのように機能するかはわかりません)。一般に、「最も安全な」アプローチは、デスクトップ環境の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
3
user1686