From: alex.wayfer@... Date: 2021-04-26T19:59:10+00:00 Subject: [ruby-core:103601] [Ruby master Bug#17820] `Errno::EINVAL` from `Process.kill` with available signal on Windows Issue #17820 has been updated by AlexWayfer (Alexander Popov). jeremyevans0 (Jeremy Evans) wrote in #note-7: > I tested every signal from `Signal.list` on Windows 10, and all signals work in some fashion, assuming you send the signal to the current process. For `Process.kill`: > > * INT raises a standard Interrupt exception > * ILL/SEGV simulates a crash and generates a backtrace (does not run ensure blocks) > * ABRT/FPE/KILL exits immediately (does not run ensure blocks) > * TERM exits immediately (runs ensure blocks) > * EXIT doesn't work > > However, EXIT works for `Signal.trap`. This code prints `1` and then `2`: > > ``` > Signal.trap('EXIT'){p 2} > begin > Process.kill('TERM', $$) > ensure > p 1 > end > ``` > > So all signals listed in `Signal.list` are valid in some context. The documentation for `Signal` itself states: > > ``` > The list of available signal names and their interpretation is > system dependent. > ``` > > So Ruby makes no guarantee that signal handling behavior will be consistent across systems. > > Considering all this, I don't think the current behavior is a bug. If you think the behavior or documentation could be improved, please submit a pull request. I'm glad that these things work for current process, and with such circumstances the current behavior can be left, but it's weird for me that the same doesn't work for other Ruby processes. [I'm testing `filewatcher-cli`](https://github.com/filewatcher/filewatcher-cli/pull/35) with Windows, and the original author wants Filewatcher to be cross-independent, but there is `restart-signal` option and I just can't test it properly on Windows. I've already changed the default value from `TERM` to `KILL`, already added a warning for any different value, but spawned test Ruby script should trap specific signal and save a file with it. And even if I want to trap the default value (`KILL`) ��� I can't, I should trap `EXIT`, but such signal doesn't stop process, and so on��� terrible behavior for me. I understand that Windows is not primary platform for Ruby, but I wish improvements and consistency in this direction. I'm not an expert with process signals so I can't send a PR for this. ---------------------------------------- Bug #17820: `Errno::EINVAL` from `Process.kill` with available signal on Windows https://bugs.ruby-lang.org/issues/17820#change-91694 * Author: AlexWayfer (Alexander Popov) * Status: Rejected * Priority: Normal * ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x64-mingw32] * Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Hello. I've installed Ruby on Windows via [Chocolatey](https://community.chocolatey.org/packages/ruby). I receive `Errno::EINVAL` from `Process.kill` with almost every signal. Only `0` seems working. `TERM` (`15`), `INT` (`2`) ��� don't. Although they're in `Signal.list` output: ![](clipboard-202104222051-b64xq.png) ---Files-------------------------------- clipboard-202104222051-b64xq.png (63.9 KB) clipboard-202104222318-tbufr.png (96.8 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: