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

From: yamataka@...08.itscom.net
Date: 2019-08-08 11:24:23 UTC
List: ruby-list #50805
山口と申します。

Windows msys2 mingw64

yama@JPC00183513 ~/b/p/sample> uname -a
MINGW64_NT-10.0-17763 JPC00183513 3.0.7-338.x86_64 2019-05-27 06:58 UTC x86_64 Msys
yama@JPC00183513 ~/b/p/sample> ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x64-mingw32]

の環境で、

yama@JPC00183513 ~/b/p/sample> cat signal.rb
# coding: utf-8
$stdout.sync = true

p Signal.list

# EXIT       mignw fail
# INT w pass mingw fail
# QUIT       mingw unsupported signal `SIGQUIT' (ArgumentError)
# ILL        mingw can't trap reserved signal: SIGILL (ArgumentError)
# ABRT       mingw fail
# FPE        mingw can't trap reserved signal: SIGFPE (ArgumentError)
# KILL       mingw Invalid argument - SIGKILL (Errno::EINVAL)
# TERM       mingw fail
Signal.trap(:INT) {
  puts "まわって"
  puts "まわって"
  puts "まわって"
  exit
}

while true
  puts "とんで"
  sleep 3
end

を実行し、C-c すると、

yama@JPC00183513 ~/b/p/sample> ruby signal.rb
{"EXIT"=>0, "INT"=>2, "ILL"=>4, "ABRT"=>22, "FPE"=>8, "KILL"=>9, "SEGV"=>11, "TERM"=>15}
とんで
とんで
yama@JPC00183513 ~/b/p/sample>

と、Signal.trap(:INT) のブロックが実行されない症状に遭遇しています

一方
Windows コマンドプロンプトで、rubyのバージョンが少し異なりますが、
c:\yama\bin\platform\sample>ruby --version
ruby 2.5.5p157 (2019-03-15 revision 67260) [x64-mingw32]

c:\yama\bin\platform\sample>ruby signal.rb
{"EXIT"=>0, "INT"=>2, "ILL"=>4, "ABRT"=>22, "FPE"=>8, "KILL"=>9, "SEGV"=>11, "TERM"=>15}
とんで
とんで
とんで
まわって
まわって
まわって

c:\yama\bin\platform\sample>

と正常に動作します。

回避策などあれば、ご教示いただけますでしょうか?

In This Thread

Prev Next