パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Systemd、ログアウト時にバックグラウンドプロセスをkillするよう既定値を変更へ」記事へのコメント

  • 変更には理由あり (スコア:2, すばらしい洞察)

    by Anonymous Coward

    リンク先にも書いてありますが、そもそもはGNOMEだとログアウト時にgnome-keyringとかのプロセスが残ってしまい、ログインログアウトを連発するとゾンビ化したプロセスが多発することが理由のようです。
    https://bbs.archlinux.org/viewtopic.php?id=204307 [archlinux.org]
    https://bugs.freedesktop.org/show_bug.cgi?id=94508 [freedesktop.org]
    黙って変更したわけじゃないんだからこっちで対応すりゃいいだけの話じゃん、と気にならないのは少数派なのか。

    • by Anonymous Coward

      セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。

      systemdは同じsessionに属するプロセスをorphanでも追いかけれるんでlogout時にclean upできるのはありがたいですが、普通にやっちゃうと互換性が無くて怒る人たちが多いようです。いっそのことorphan processにもSIGHUPを送れば良いんじゃねと思ったりしますが変ですかね?(理想的にはsignalの新設なんかも)

      • by Anonymous Coward on 2016年06月01日 11時22分 (#3022228)

        > セキュリティ、オーディオ、文字入力、クラウドサービス等でユーザー単位のデーモンを作る時って、logout時に正しく終了させるというのは結構難しいんですよね。知らない間にorphanになってて、それを検出する良い方法も無いですし。

        本物のデーモンなら難しいですが、GNOME 関係ならユーザーとの対話を伴うようなプログラムでしょうし、
        単にユーザーセッションに対応するプロセスグループを作ってそれに属させておいて、ログアウト時に、
        SIGHUP をプロセスグループに送ればいいと思うんですが、それでなにか問題があるのでしょうか?

        親コメント
        • by Anonymous Coward

          そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。

          • by Anonymous Coward

            だからと言ってsystemdがデフォルトでやることなのか?と言うと、……どうなんだろう。
            今やsystemdはレイヤーが広すぎて守備範囲と言えるのかどうかさっぱりわからない。

          • by Anonymous Coward

            > そのようにしないプログラマが多すぎるからゾンビが残っちゃうんでしょ。

            それはおかしいですよ。
            SIGHUP を送るようにするなら、送る担当は GUI toolkit のセッションマネージャーです。
            GUI toolkit のセッションマネージャーを作るプログラマなんて、世界で10人もいませんよ。

            アプリケーションプログラマーは何もしなくても良いはずですが。

            • by Anonymous Coward

              セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。

              ちなみに、この投稿時にsradの下に出てました > "UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア"

              • by Anonymous Coward

                > セッションの終了時にプロセスが正しい順序で終了しないとorphanになってシグナルの送り先が見失われるのと、

                プロセスグループに関して誤解があると思います。
                シグナルの送り先がどういう順序で終了しても(たとえプロセスグループリーダーが先に終了しても)、子孫プロセスが1つでも残っていればプロセスグループは残りますし、シグナルを送ることができます。

                > そもそもSIGHUPは端末の終了であってセッションの終了ではないというのが問題なんだと思います。

                SIGHUP が端末の切断であったのは確かだし、今でもその意味は残っていますが、現在ではセッション終了時には端末とは関係なくとも、orphaned process group には送られるシグナルとなっていますから、端末の終了に限定する必要はありません。

                なお、daemon(3) を呼べば、process group が切り替わりますから、今回のsystemd の件のように巻き添えをくらう心配はありません。

クラックを法規制強化で止められると思ってる奴は頭がおかしい -- あるアレゲ人

処理中...