class SignalException - Documentation for Ruby 2.3.0 (original) (raw)

Raised when a signal is received.

begin Process.kill('HUP',Process.pid) sleep rescue SignalException => e puts "received Exception #{e}" end

produces:

received Exception SIGHUP

Public Class Methods

new(sig_name) → signal_exception click to toggle source

new(sig_number [, name]) → signal_exception

Construct a new SignalException object. sig_name should be a known signal name.

static VALUE esignal_init(int argc, VALUE *argv, VALUE self) { int argnum = 1; VALUE sig = Qnil; int signo; const char *signm;

if (argc > 0) {
    sig = rb_check_to_integer(argv[0], "to_int");
    if (!NIL_P(sig)) argnum = 2;
    else sig = argv[0];
}
rb_check_arity(argc, 1, argnum);
if (argnum == 2) {
    signo = NUM2INT(sig);
    if (signo < 0 || signo > NSIG) {
        rb_raise(rb_eArgError, "invalid signal number (%d)", signo);
    }
    if (argc > 1) {
        sig = argv[1];
    }
    else {
        sig = rb_signo2signm(signo);
    }
}
else {
    int len = sizeof(signame_prefix);
    if (SYMBOL_P(sig)) sig = rb_sym2str(sig); else StringValue(sig);
    signm = RSTRING_PTR(sig);
    if (strncmp(signm, signame_prefix, len) == 0) {
        signm += len;
        len = 0;
    }
    signo = signm2signo(signm);
    if (!signo) {
        rb_raise(rb_eArgError, "unsupported name `%.*s%"PRIsVALUE"'",
                 len, signame_prefix, sig);
    }
    sig = rb_sprintf("SIG%s", signm);
}
rb_call_super(1, &sig);
rb_ivar_set(self, id_signo, INT2NUM(signo));

return self;

}

Public Instance Methods

signo → num click to toggle source

Returns a signal number.

static VALUE esignal_signo(VALUE self) { return rb_ivar_get(self, id_signo); }