From: Akio Tajima Date: 2011-04-25T20:45:41+09:00 Subject: [ruby-dev:43444] [Ruby 1.9 - Bug #4596][Open] Process.kill doesn't accept pid 0 (win32) Issue #4596 has been updated by Akio Tajima. Status changed from Closed to Open :KILLを与えた場合に、WindowsでのエミュレーションではESRCH(No Such process)になることを考慮していなかった。 0を認めるのは、:INTに限定するように修正が必要。 ---------------------------------------- Bug #4596: Process.kill doesn't accept pid 0 (win32) http://redmine.ruby-lang.org/issues/4596 Author: Akio Tajima Status: Open Priority: Normal Assignee: Akio Tajima Category: core Target version: ruby -v: - 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; } -- http://redmine.ruby-lang.org