Bug #13191
closed
sample/pty/shl.rb がうまく動かない
Added by znz (Kazuhiro NISHIYAMA) over 7 years ago.
Updated almost 7 years ago.
Description
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
のバグなのかわかりませんでした。
- Status changed from Open to Closed
Applied in changeset r57531.
pty/shl.rb: update [ci skip]
- sample/pty/shl.rb: stop writer loop when the child exited.
PTY::ChildExited no longer raises asynchronously since r20298.
[ruby-dev:49974] [Bug #13191]
- Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN to 2.2: REQUIRED, 2.3: REQUIRED, 2.4: REQUIRED
- Backport changed from 2.2: REQUIRED, 2.3: REQUIRED, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED
ruby_2_3 r58516 merged revision(s) 57531,57532,57533,57537.
- Backport changed from 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: DONE
ruby_2_4 r58620 merged revision(s) 57531,57532,57533,57537.
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 `<main>'
sample/pty/shl.rb:86:in `run': killed thread (ThreadError)
- Status changed from Closed to Open
- Status changed from Open to Closed
- Backport changed from 2.2: REQUIRED, 2.3: DONE, 2.4: DONE to 2.2: REQUIRED, 2.3: REQUIRED, 2.4: REQUIRED
r57530 の backport のため Backport 欄を REQUIRED に戻します。
- Backport changed from 2.2: REQUIRED, 2.3: REQUIRED, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED
ruby_2_3 r59228 merged revision(s) 57530.
- Backport changed from 2.2: REQUIRED, 2.3: DONE, 2.4: REQUIRED to 2.2: REQUIRED, 2.3: DONE, 2.4: DONE
ruby_2_4 r59404 merged revision(s) 57530.
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0