Bug #4596

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

Added by Akio Tajima almost 3 years ago. Updated almost 3 years ago.

[ruby-dev:43421]
Status:Closed
Priority:Normal
Assignee:Akio Tajima
Category:core
Target version:1.9.3
ruby -v:- Backport:

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

Associated revisions

Revision 31344
Added by Akio Tajima almost 3 years ago

  • win32/win32.c (kill): accept 0 as pid, fixes #4596

Revision 31345
Added by Akio Tajima almost 3 years ago

  • win32/win32.c (kill): accept 0 only sig is SIGINT #4596

History

#1 Updated by Yukihiro Matsumoto almost 3 years ago

  • ruby -v changed from ruby 1.9.3dev (2011-04-18) [i386-mswin32_100] to -

=begin
まつもと ゆきひろです

シンガポールはネットが細い気が。

In message "Re: [Ruby 1.9 - Bug #4596][Open] Process.kill doesn't accept pid 0 (win32)"
on Fri, 22 Apr 2011 21:52:22 +0900, Akio Tajima artonx@yahoo.co.jp writes:

|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 を指定すると、呼び出し側プロセスのコンソールを共有するすべてのプロセスに信号が送信されます。」と、所定の効果が得られる。

私には妥当だと思えますが、うささんはどう思いますか?
=end

#2 Updated by Yukihiro Matsumoto almost 3 years ago

=begin
まつもと ゆきひろです

シンガポールはネットが細い気が。

In message "Re: [Ruby 1.9 - Bug #4596][Open] Process.kill doesn't accept pid 0 (win32)"
on Fri, 22 Apr 2011 21:52:22 +0900, Akio Tajima artonx@yahoo.co.jp writes:

|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 を指定すると、呼び出し側プロセスのコンソールを共有するすべてのプロセスに信号が送信されます。」と、所定の効果が得られる。

私には妥当だと思えますが、うささんはどう思いますか?
=end

#3 Updated by Usaku NAKAMURA almost 3 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to Akio Tajima

=begin
とりあえず記憶に何もないので、変えちゃっていいと思います。
artonさんよろしく。
=end

#4 Updated by Akio Tajima almost 3 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r31344.
Akio, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • win32/win32.c (kill): accept 0 as pid, fixes #4596 =end

#5 Updated by Akio Tajima almost 3 years ago

  • Status changed from Closed to Open

=begin
:KILLを与えた場合に、WindowsでのエミュレーションではESRCH(No Such process)になることを考慮していなかった。
0を認めるのは、:INTに限定するように修正が必要。
=end

#6 Updated by Akio Tajima almost 3 years ago

  • Status changed from Open to Closed
  • Target version set to 1.9.3

=begin

=end

Also available in: Atom PDF