Project

General

Profile

Actions

Feature #4362

closed

Process.kill should accept -SIGXXX with implicit conversion

Added by nagachika (Tomoyuki Chikanaga) about 13 years ago. Updated almost 13 years ago.

Status:
Closed
Target version:
[ruby-dev:43169]

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 @@ rb_f_kill(int argc, VALUE *argv)
int negative = 0;
int sig;
int i;

  • volatile VALUE str;
    const char *s;

    rb_secure(2);
    @@ -376,11 +377,11 @@ rb_f_kill(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 @@ rb_f_kill(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 @@ rb_f_kill(int argc, VALUE *argv)
}
rb_raise(rb_eArgError, "bad signal type %s",
rb_obj_classname(argv[0]));

  • }
    break;
    }
    =end
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0