パスワードを忘れた? アカウント作成
12797952 story
Debian

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

ストーリー by hylom
知らずに悲劇が発生する予感 部門より
Ryo.F 曰く、

Debianのバグトラッカによると、/etc/systemd/logind.confで設定できる「KillUserProcesses」の既定値が「no」から「yes」に変更されたようだ(Slashdot)。

たとえばsshで接続してscreenやtmuxで作業し、デタッチ・ログアウトしてしばらく経ってから作業結果を確認、といった作業で悲劇が起こる可能性が。

なぜこうなった……。

KillUserProcessesの値が「yes」に設定されていると、ログアウト時にsystemdが自動的にユーザーのバックグラウンドプロセスを削除するようになる。それによってこのような問題が発生するようになるという。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2016年05月30日 11時21分 (#3020918)

    例えば、sshで接続して、screenやtmuxで作業して、デタッチ・ログアウトして、しばらく経ってから作業結果を確認…とかで悲劇が起こる可能性が。

    これから先、screenやtmux使う時には、忘れずにsystemd-run --scope --userって前置詞つけて起動しろってことだよ。
    ログアウト後に殺さないで貰えるかどうかを管理者たるsystemd様にお伺いたてとけってこった。言わせんな恥ずかしい。

    // やりたい放題やってんな >>>systemd
    // もはやOOM Killerよりたち悪い

    • by Anonymous Coward

      nohupの立場はどうなるんです?全てのシェルはsystemd対応せよってことなんですかい?

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

    by Anonymous Coward on 2016年05月31日 19時40分 (#3021943)

    リンク先にも書いてありますが、そもそもは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:変更には理由あり (スコア:3, すばらしい洞察)

      by mishima (737) on 2016年06月01日 9時35分 (#3022181) ホームページ 日記

      慣例に従って書かれた今までのコードすべてとの互換性を壊してしまうような変更だから問題になるのでしょう。

      http://www.glamenv-septzen.net/view/854#idf2f03a [glamenv-septzen.net]
      setsid、signal まわりで対応していた世界に
      「PAMで新規セッションを作成しろ」というのは筋が悪いと思います。

      X のログインと TTY のログインがかけ離れているのに、同じ枠組みで取り扱ってきたのが問題のような気もします。

      --
      # mishimaは本田透先生を熱烈に応援しています
      親コメント
      • by qwerty (20776) on 2016年06月01日 23時14分 (#3022600) 日記

        同意。
        慣例じゃなくて仕組みかな。

        CUIなら PID, PPID, PGID, SID, TPGID, tty あたりがあれば一通り問題なく動くからねぇ…。
        ただ、これらのIDは擬似端末とプロセスと標準入出力に紐づいた仕組みで、
        GUI(desktop session) を管理するには足りないのは分かるが
        GUI用の仕組みを作るのが筋であって、巻き添えにするのは違う。

        --
        [Q][W][E][R][T][Y]
        親コメント
    • by Anonymous Coward on 2016年05月31日 20時25分 (#3021961)

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

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

      親コメント
      • by Anonymous Coward

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

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

        • by Anonymous Coward

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

    • by Anonymous Coward on 2016年06月01日 10時52分 (#3022218)

      > リンク先にも書いてありますが、そもそもはGNOMEだとログアウト時にgnome-keyringとかのプロセスが残ってしまい、ログインログアウトを連発するとゾンビ化したプロセスが多発することが理由のようです。

      要はGNOMEのバグがとれないから、GNOMEを直すんじゃなくて、従来から存在する大量のプログラムに対して、非互換な変更を押し付けるってこと?

      > 黙って変更したわけじゃないんだからこっちで対応すりゃいいだけの話じゃん、と気にならないのは少数派なのか。

      基盤ソフトウェアを保守する立場からすると、ありえないですね。
      基盤的なソフトウェアの場合、従来からその基盤に依存しているアプリケーションとの互換性を維持するというのは、普通なら相当に優先度が高い目標です。
      バグを直すんじゃなくて、互換性を壊して誤魔化すとか、ありえない選択かと。
      正常な判断力があれば、バグを直すことで対応するのでは?

      親コメント
    • by Anonymous Coward

      GNOMEをkillしちゃえよもう
      なんでGNOMEの問題に他が巻き込まれにゃんらんのだ

      • by Anonymous Coward

        Systemd使うの諦めれば済むだろ。

  • by Anonymous Coward on 2016年06月01日 9時53分 (#3022193)

    systemdってCLIでPC操作すること全く考慮してないよね
    不便になっていく一方

    • by Anonymous Coward on 2016年06月01日 10時23分 (#3022209)

      私を含む、Linuxをサーバー or CUI環境 (sshログインして計算ぶん回すとか) だけで使うことにしか興味ない人って、Linuxデスクトップ環境で生活している人よりも多いんじゃないかと思うがどうだろう?
      Webブラウジングや文書書き、コーディングとテストまでは手元のMacで、サーバーとしてのデプロイ先や計算機資源としてLinuxをリモートで使用、というような。

      そういう人にとって、GNOMEやらfreedesktop.orgのゴミやら何やら全く興味ないし、今まで使っているtmuxやscreenがなんでそんなくだらんモノのとばっちり受けなきゃいけないんだと溜息つきたくもなりますね。

      親コメント
      • by Anonymous Coward

        LinuxがWindowsやMacと違って一般受けしない理由がよくわかるわ

        • by Anonymous Coward

          iいわゆるLinuxデスクトップ環境なんか一般受けしなくていいじゃないか
          それは、強いて言えばAndroidの役目

          そんなんのが無くても、サーバーや科学技術計算の世界で主役級の存在価値を持つLinuxなんだから、そっちの邪魔になる変更を、全プロセスの親という重要な所に無神経に入れないで欲しい

          • by Anonymous Coward

            > サーバーや科学技術計算の世界で主役級の存在価値を持つLinuxなんだから

            スパコンでは、Linuxが圧倒的なシェアを持つわけですが(2015年11月の時点で、Top500 の98.8%がLinux)、
            スパコンでこの機能有効にしたら、ユーザー起動のバッチジョブが全部殺されてとんでもないことになりそうですね…

            • by Anonymous Coward

              KillUserProcesses=no で納入しろよ。

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

                > KillUserProcesses=no で納入しろよ。

                スパコンとして納入されてるマシンなら、当然そうするでしょうけど、
                手元のLinux PCでプログラムを開発して、計算規模を大きくする段階で
                スパコンを利用するのが普通だから、各研究者が持つLinux PCで、
                KillUserProcessesを no に変更することが強いられるわけですな。

                スパコン使う研究者じゃなくても、Linuxで動くサーバーソフトウェアを
                開発しているプログラマーにも同じ問題があるでしょうね。

                実は、今Linuxをデスクトップで利用しているユーザーって、ほとんどが
                こういう種類のユーザーじゃないのかな?

                だとすると、GNOMEのバグを直せないばっかりに、大多数のユーザーに面倒を
                押しつけてるってことに…

                親コメント
        • by Anonymous Coward

          ここで一般受けの話を出すのは何故?
          この流れで、一般受けしない理由がわかったって何の話?

  • by Anonymous Coward on 2016年06月01日 10時26分 (#3022210)

    1. ログインしてtmux
    2. top(1)実行
    3. デタッチ(Ctrl-b)
    4. アタッチ(tmux a) でtop(1)の生存を確認
    5. ログアウト
    6. 再びログインしてtmux a
    no current session.

    $ dpkg -l systemd | grep ^ii
    ii systemd 230-1 amd64 system and service manager

    jessieは大丈夫だった(ずっと似たようなの使用中)

    • by Anonymous Coward

      補足。
      4. と 5. の間は、もちろんデタッチしてます

  • by Anonymous Coward on 2016年05月30日 16時24分 (#3021122)

    SSHでログインしてVNCServer起動して、いったんログアウトしてからSSHポート転送ツール経由で接続するなんてやってるけど、
    そういうのもkillされちゃうってことですよね。
    リモート接続関係の解説で修正が結構発生するのでは。

    • by Ryo.F (3896) on 2016年05月30日 16時56分 (#3021155) 日記

      VNC serverをsystemd経由で起動していれば大丈夫なんじゃなかろうか(未検証)。

      まあ、いずれにせよ、いろんなところに影響しそうですよね。

      親コメント
  • by Anonymous Coward on 2016年05月31日 17時53分 (#3021859)

    stableではまだ大丈夫ですね

    #KillUserProcesses=no
    となっている暗黙のデフォルトをコメントアウトして
    KillUserProcesses=no
    で明示的に指定すればいいのかな?

    # まさかYesで上書いたりしない。。よね。。。

  • by Anonymous Coward on 2016年05月31日 18時59分 (#3021918)

    規定値の話だから変えればいいだけじゃね?

  • by Anonymous Coward on 2016年05月31日 20時48分 (#3021973)

    ログアウトしたユーザーのプロセスは終了するのが本来の形。

    • by Anonymous Coward on 2016年05月31日 20時57分 (#3021988)

      その昔UNIXマシンを多数のユーザで共有していた頃は、
      「バックグラウンドでプログラムを動かしたままログアウトするな!リソース不足になるだろ!」
      ってよく怒られたものでした・・・

      親コメント
    • by Anonymous Coward on 2016年06月01日 10時55分 (#3022219)

      いやいや、今回の件では、daemon(3) 呼んだプロセスまで殺されるんですよ。
      デーモンプロセスは、ユーザー起動であっても、本来は殺されない方が筋。

      こういう非互換な変更を平気で入れてくるってことは、systemdのメンテナーは、従来から存在するプログラムとの互換性は気にしないってポリシーなんでしょうね。
      今後も同様な問題がたびたび起きそうな予感。

      親コメント
      • by Anonymous Coward

        伝統的なinit(8)の代わりとして十分モダンで効率的で、かつsystemdのようにシステム全体をLinux cgroup(3)に過度に依存させるようなことを無神経に強要させない、穏やかな設計・実装方針のものが主流に置き換わって欲しい

    • by Anonymous Coward

      プロセスを残すのにSIGHUPの無視を使うなんてのが筋の悪いやり方ですよね。

      systemdはログインセッション毎にコンテナを作るので、ログアウト後もコンテナが残り続けるなんてのも問題。

      • by Anonymous Coward

        > プロセスを残すのにSIGHUPの無視を使うなんてのが筋の悪いやり方ですよね。

        どういう意味で筋が悪いのでしょうか?
        SIGHUPは、セッションの終了を示すシグナルですから、セッション終了時にプロセスが終了しないようにするためにSIGHUPを無視するというのは、ストレートな方法だと思うんですが…
        まあイマドキのプロセス構成だと、セッション終了時にSIGHUPが飛んでこないことが多いと思いますが、むしろそれはSIGHUP投げるように直すべきじゃないのかな。

    • by Anonymous Coward

      Windowsは普通にそうなってるよな。必要ならmachine-wideなサービスを作れっていうスタンス。
      systemdもそれを目標としてるんだろう。古参連中が理解できないだけで。

      • by Anonymous Coward

        新しい酒は新しい革袋に。systemd-compatibleなユーザランドだけに浄化した新しいディストロでやってくれ。
        Windowsでは当たり前だからといって/bin, /bin/sbin, /usr/bin, /usr/share/binのバイナリに全部".exe"を付けたりはしないだろ?

        • by uxi (5376) on 2016年06月02日 18時31分 (#3023190)

          Windowsでは当たり前だからといって/bin, /bin/sbin, /usr/bin, /usr/share/binのバイナリに全部".exe"を付けたりはしないだろ?

          よ、呼んだ?

          --
          uxi
          親コメント
    • by Anonymous Coward

      プログラムで言うと○○リークとおなじですからね。
      今までが異常でUnixの嫌いなとこの1つでした。

      initスクリプトもI/Fシカトが多くてイヤだったけどね。
      このあたりが組織ごとにバラバラ独自ルール、時によっては真逆の方針生んでたり、バカじゃね?と思ったもんです。

  • by Anonymous Coward on 2016年05月31日 21時57分 (#3022022)

    「残したいプロセスはService作ってね」
    っていう思考なのかな

    ワンショットならcron系と比べて驚くほど手間の掛かる奴だが

typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...