Project

General

Profile

Actions

Bug #4596

closed

Process.kill doesn't accept pid 0 (win32)

Added by arton (Akio Tajima) over 13 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-dev:43421]

Description

=begin
MSWin32版Rubyで、Process.killにpidとして0を指定するとEINVALとなります。
この動作は、以下の理由からバグだと思いますが、何か事情があるのでしょうか?
バグと考える理由)

  1. Process.killにpidとして0を指定することは認められている。
    るりま(http://doc.okkez.net/static/192/class/Process.html)でもおそらくAPIの元となったkill(2)でも、pidとして0を指定した場合、カレントプロセスのプロセスグループにシグナルを送るとなっています。
  2. win32/win32.cのkillの実装でSIGINTの送信をエミュレートするために利用しているGenerateConsoleCtrlEventは、pidとして0を指定した場合、MSDNによれば「dwProcessGroupId パラメータに 0 を指定すると、呼び出し側プロセスのコンソールを共有するすべてのプロセスに信号が送信されます。」と、所定の効果が得られる。

以下がパッチです。

--- win32.c~ 2011-04-17 00:02:49.000000000 +0900
+++ win32.c 2011-04-22 20:53:36.000000000 +0900
@@ -3727,7 +3727,7 @@ kill(int pid, int sig)
int ret = 0;
DWORD err;

  • if (pid <= 0) {
  • if (pid < 0) {
    errno = EINVAL;
    return -1;
    }

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0