[ruby-list:50810] Re: [質問] msys2 mingw64 ruby Signal.trap(:INT) が動作しない?

From: yamataka@...08.itscom.net
Date: 2019-08-09 05:21:24 UTC
List: ruby-list #50810
ren さん、

On Fri, 09 Aug 2019 14:09:21 +0900,
ren kannagi wrote:
> これも、以前の redebug でソースコードが表示されなかった問題と原因は一緒です。

今回も、
$stdout.sync = true
を入れないと、

while true
  puts "とんで"
  sleep 3
end

の、puts が表示されなかったので、ソースには、いれて表示するようになったのですが...
Ctrl-c の割り込みまでは対応できずで質問しました。

> rubyの割り込みのソースを読んだわけではありませんが、
> おそらく Signal.trap(:INT) を動作させるためには、stdinがコンソールのハンドルである必要があるのだと思います。
> msys2 mingw64 のターミナル(mintty)で実行した場合には、stdin, stdout, stderr は msys2(cygwin) の pty をエミュレートするための pipe になっています。
> よって、ruby の Signal.trap(:INT) が動作しないのだと思います。

理解が深まりました。

> したがって、mintty 中で動作させるためには winpty を使用する必要があります。
> 手元では winpty を使用するとことで mintty 中でも Signal.trap(:INT) が動作します。

動作しました。

ご教示ありがとうございます。
作成中のスクリプト msys2 mingw64 上で動作させるのをあきらめようと思っていたので、
動作するようになり、大変うれしいです。

ご教示ありがとうございました。



In This Thread

Prev Next