Feature #4362

Process.kill should accept -SIGXXX with implicit conversion

Added by Tomoyuki Chikanaga about 3 years ago. Updated almost 3 years ago.

[ruby-dev:43169]
Status:Closed
Priority:Normal
Assignee:Tomoyuki Chikanaga
Category:-
Target version:1.9.3

Description

=begin
Process.kill の第一引数は Fixnum か Symbol、String でシグナルの種類を指定し、
文字列の時は先頭に - をつけることでプロセスグループへシグナル送信するようになっています。
実際には Fixnum, Symbol, String 以外のオブジェクトを渡すと to_str で文字列への
暗黙の変換が行なわれるようになっているのですが、この時に先頭の - を認識しません。
またシンボルの時も先頭の - が解釈されません。

Process.kill(:"-SIGTERM", $$)
ArgumentError: unsupported name SIG-SIGTERM'
Process.kill(:"-TERM", $$)
ArgumentError: unsupported name
SIG-TERM'

マニュアルには特に String 以外の時のことは書かれていませんが、Symbol や暗黙の変換が行なわれた時にも
先頭の - が解釈されるようにしたほうが良いのではないかと思うのですがいかがでしょうか?

diff --git a/signal.c b/signal.c
index 27d90ac..5343108 100644
--- a/signal.c
+++ b/signal.c
@@ -359,6 +359,7 @@ rbfkill(int argc, VALUE *argv)
int negative = 0;
int sig;
int i;
+ volatile VALUE str;
const char *s;

  rb_secure(2);

@@ -376,11 +377,11 @@ rbfkill(int argc, VALUE *argv)

    case T_STRING:
s = RSTRING_PTR(argv[0]);
  • str_signal: if (s[0] == '-') { negative++; s++; }
  •  str_signal:
    

    if (strncmp("SIG", s, 3) == 0)
    s += 3;
    if((sig = signm2signo(s)) == 0)
    @@ -391,9 +392,6 @@ rbfkill(int argc, VALUE *argv)
    break;

    default:
    
  •    {
    
  •  VALUE str;
    

    str = rb_check_string_type(argv[0]);
    if (!NIL_P(str)) {
    s = RSTRING_PTR(str);
    

    @@ -401,7 +399,6 @@ rbfkill(int argc, VALUE *argv)
    }
    rbraise(rbeArgError, "bad signal type %s",
    rbobjclassname(argv[0]));

  • }
    break;
    }
    =end

Associated revisions

Revision 31579
Added by Tomoyuki Chikanaga almost 3 years ago

  • signal.c (rbfkill): accept '-SIGXXX' style signal with Symbol or implicit convertion with #to_str. fixes #4362
  • test/ruby/testsignal.rb (testsignalprocessgroup): add a test for send signal to process group.

History

#1 Updated by Tomoyuki Chikanaga almost 3 years ago

この Process.kill の引数の処理についてですが、
引数に受け付けるものが増えるだけで困ることはあまりないでしょうし、
もうしばらく待って反対意見がなければ入れてしまおうと思います。

#2 Updated by Tomoyuki Chikanaga almost 3 years ago

  • Assignee set to Tomoyuki Chikanaga

#3 Updated by Yukihiro Matsumoto almost 3 years ago

まつもと ゆきひろです

In message "Re: [Ruby 1.9 - Feature #4362] Process.kill should accept -SIGXXX with implicit conversion"
on Wed, 11 May 2011 22:07:07 +0900, Tomoyuki Chikanaga nagachika00@gmail.com writes:
|
|Issue #4362 has been updated by Tomoyuki Chikanaga.
|
|
|この Process.kill の引数の処理についてですが、
|引数に受け付けるものが増えるだけで困ることはあまりないでしょうし、
|もうしばらく待って反対意見がなければ入れてしまおうと思います。

これはバグでしょう。1.8でも直した方が良いくらいです。

#4 Updated by Yukihiro Matsumoto almost 3 years ago

まつもと ゆきひろです

In message "Re: [Ruby 1.9 - Feature #4362] Process.kill should accept -SIGXXX with implicit conversion"
on Wed, 11 May 2011 22:07:07 +0900, Tomoyuki Chikanaga nagachika00@gmail.com writes:
|
|Issue #4362 has been updated by Tomoyuki Chikanaga.
|
|
|この Process.kill の引数の処理についてですが、
|引数に受け付けるものが増えるだけで困ることはあまりないでしょうし、
|もうしばらく待って反対意見がなければ入れてしまおうと思います。

これはバグでしょう。1.8でも直した方が良いくらいです。

#5 Updated by Tomoyuki Chikanaga almost 3 years ago

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

This issue was solved with changeset r31579.
Tomoyuki, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • signal.c (rbfkill): accept '-SIGXXX' style signal with Symbol or implicit convertion with #to_str. fixes #4362
  • test/ruby/testsignal.rb (testsignalprocessgroup): add a test for send signal to process group.

Also available in: Atom PDF