アカウント名:
パスワード:
リンク先にも書いてありますが、そもそもはGNOMEだとログアウト時にgnome-keyringとかのプロセスが残ってしまい、ログインログアウトを連発するとゾンビ化したプロセスが多発することが理由のようです。https://bbs.archlinux.org/viewtopic.php?id=204307 [archlinux.org]https://bugs.freedesktop.org/show_bug.cgi?id=94508 [freedesktop.org]黙って変更したわけじゃないんだからこっちで対応すりゃいいだけの話じゃん、と気にならないのは少数派なのか。
セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。
systemdは同じsessionに属するプロセスをorphanでも追いかけれるんでlogout時にclean upできるのはありがたいですが、普通にやっちゃうと互換性が無くて怒る人たちが多いようです。いっそのことorphan processにもSIGHUPを送れば良いんじゃねと思ったりしますが変ですかね?(理想的にはsignalの新設なんかも)
> セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。
本物のデーモンなら難しいですが、GNOME 関係ならユーザーとの対話を伴うようなプログラムでしょうし、単にユーザーセッションに対応するプロセスグループを作ってそれに属させておいて、ログアウト時に、SIGHUP をプロセスグループに送ればいいと思うんですが、それでなにか問題があるのでしょうか?
そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。
だからと言ってsystemdがデフォルトでやることなのか?と言うと、……どうなんだろう。今やsystemdはレイヤーが広すぎて守備範囲と言えるのかどうかさっぱりわからない。
> そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。
それはおかしいですよ。SIGHUP を送るようにするなら、送る担当は GUI toolkit のセッションマネージャーです。GUI toolkit のセッションマネージャーを作るプログラマなんて、世界で10人もいませんよ。
アプリケーションプログラマーは何もしなくても良いはずですが。
セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。
ちなみに、この投稿時にsradの下に出てました > "UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア"
> セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、
プロセスグループに関して誤解があると思います。シグナルの送り先がどういう順序で終了しても(たとえプロセスグループリーダーが先に終了しても)、子孫プロセスが1つでも残っていればプロセスグループは残りますし、シグナルを送ることができます。
> そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。
SIGHUP が端末の切断であったのは確かだし、今でもその意味は残っていますが、現在ではセッション終了時には端末とは関係なくとも、orphaned process group には送られるシグナルとなっていますから、端末の終了に限定する必要はありません。
なお、daemon(3) を呼べば、process group が切り替わりますから、今回のsystemd の件のように巻き添えをくらう心配はありません。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ研究家
変更には理由あり (スコア:2, すばらしい洞察)
リンク先にも書いてありますが、そもそもはGNOMEだとログアウト時にgnome-keyringとかのプロセスが残ってしまい、ログインログアウトを連発するとゾンビ化したプロセスが多発することが理由のようです。
https://bbs.archlinux.org/viewtopic.php?id=204307 [archlinux.org]
https://bugs.freedesktop.org/show_bug.cgi?id=94508 [freedesktop.org]
黙って変更したわけじゃないんだからこっちで対応すりゃいいだけの話じゃん、と気にならないのは少数派なのか。
Re: (スコア:1)
セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。
systemdは同じsessionに属するプロセスをorphanでも追いかけれるんでlogout時にclean upできるのはありがたいですが、普通にやっちゃうと互換性が無くて怒る人たちが多いようです。いっそのことorphan processにもSIGHUPを送れば良いんじゃねと思ったりしますが変ですかね?(理想的にはsignalの新設なんかも)
Re:変更には理由あり (スコア:0)
> セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。
本物のデーモンなら難しいですが、GNOME 関係ならユーザーとの対話を伴うようなプログラムでしょうし、
単にユーザーセッションに対応するプロセスグループを作ってそれに属させておいて、ログアウト時に、
SIGHUP をプロセスグループに送ればいいと思うんですが、それでなにか問題があるのでしょうか?
Re: (スコア:0)
そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。
Re: (スコア:0)
だからと言ってsystemdがデフォルトでやることなのか?と言うと、……どうなんだろう。
今やsystemdはレイヤーが広すぎて守備範囲と言えるのかどうかさっぱりわからない。
Re: (スコア:0)
> そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。
それはおかしいですよ。
SIGHUP を送るようにするなら、送る担当は GUI toolkit のセッションマネージャーです。
GUI toolkit のセッションマネージャーを作るプログラマなんて、世界で10人もいませんよ。
アプリケーションプログラマーは何もしなくても良いはずですが。
Re: (スコア:0)
セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。
ちなみに、この投稿時にsradの下に出てました > "UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア"
Re: (スコア:0)
> セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、
プロセスグループに関して誤解があると思います。
シグナルの送り先がどういう順序で終了しても(たとえプロセスグループリーダーが先に終了しても)、子孫プロセスが1つでも残っていればプロセスグループは残りますし、シグナルを送ることができます。
> そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。
SIGHUP が端末の切断であったのは確かだし、今でもその意味は残っていますが、現在ではセッション終了時には端末とは関係なくとも、orphaned process group には送られるシグナルとなっていますから、端末の終了に限定する必要はありません。
なお、daemon(3) を呼べば、process group が切り替わりますから、今回のsystemd の件のように巻き添えをくらう心配はありません。