From: zn@... Date: 2017-05-20T08:34:37+00:00 Subject: [ruby-dev:50132] [Ruby trunk Bug#13191] sample/pty/shl.rb がうまく動かない Issue #13191 has been updated by znz (Kazuhiro NISHIYAMA). ruby 2.4.2p131 (2017-05-10 revision 58637) [x86_64-linux] で試してみたところ、 r57530 も backport しないと C-z がきかないようです。 exit したときに shl.rb のプロンプトに戻ってこないので trunk で試してみたら同じ状態でした。 具体的には以下のように exit の後、操作が効かなくなるので C-z で止めて、再度 0 で選ぶと ThreadError になって shl.rb が終了します。 ``` % ruby -v ruby 2.5.0dev (2017-05-20 trunk 58810) [x86_64-linux] % ruby sample/pty/shl.rb >> p >> c % (一度戻って確認のためC-z)>> p 0 >> 0 (プロンプト再表示のためEnter) % exit % exit (操作が効かないのでC-z)>> p 0 >> 0 Traceback (most recent call last): 1: from sample/pty/shl.rb:86:in `
' sample/pty/shl.rb:86:in `run': killed thread (ThreadError) ``` ---------------------------------------- Bug #13191: sample/pty/shl.rb がうまく動かない https://bugs.ruby-lang.org/issues/13191#change-64978 * Author: znz (Kazuhiro NISHIYAMA) * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: r57530 * Backport: 2.2: REQUIRED, 2.3: DONE, 2.4: DONE ---------------------------------------- sample/pty/shl.rb で c で起動したシェルを exit で終了した時に終了がうまく検知できないようです。 r57530 の修正がないと 1.8.6 でも動かなかったので、その修正をしたもので試したのですが、1.8.6 や 1.8.7 で試すとメインスレッドに `PTY::ChildExited` が発生して、`writer` メソッドの `STDIN.getc` が中断して rescue 節で `'Exit'` が返り、うまく終了が検知できました。 たぶんネイティブスレッドを使うようになった 1.9 以降(?)だと思うのですが、`PTY::ChildExited` が発生せず、`ps` コマンドで確認するとシェルが defunct になっています。 ここまでは調べられたのですが、ちょっと調べた限りでは、これが `sample/pty/shl.rb` のバグなのか `ext/pty` のバグなのかわかりませんでした。 -- https://bugs.ruby-lang.org/