e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B
e$B:#:"5$IU$/$H$$$&$N$bLdBj$J$N$G$9$,e(B (^_^;e$B!$e(B
Wed Oct 18 23:02:40 2006 Nobuyoshi N. [email protected]
* signal.c (Init_signal): handle SIGTERM. fixed:
[ruby-list:42895]
e$B$Ne(B commit e$B$N7k2L!$%G%U%)%k%H$N>uBV$G$Oe(B
SIGTERM (kill e$B%3%^%s%I$N%G%U%)%k%He(B) e$B$Ge(B
ruby e$B%W%m%;%9$r;&$;$J$/$J$C$F$$$^$9!%e(B
TERM e$B%7%0%J%k$KBP$7$Fe(B signal_exec() e$B$r8F$V$,!$e(B
SIGTERM e$B$N5-=R$,$J$$$N$G2?$b$;$:$KH4$1$F$7$^$&$?$a!%e(B
kill e$B$GAGD>$K;`$s$G$/$l$J$$$N$OLdBj$@$H;W$$$^$9!%e(B
e$BC1=c$K$O$3$&$G$7$g$&$+!)e(B
e$B%a%C%;!<%8$,e(B “ruby: SIGTERM (SignalException)”
e$B$H$J$C$F$7$^$&$N$,e(B
e$B>/$73J9%0-$$5$$b$7$^$9$,!%!%!%e(B
Index: signal.c
— signal.c (revision 12010)
+++ signal.c (working copy)
@@ -413,6 +413,9 @@
#ifdef SIGQUIT
case SIGQUIT:
#endif
+#ifdef SIGTERM
+#endif
#ifdef SIGALRM
case SIGALRM:
#endif
@@ -680,6 +683,9 @@
#ifdef SIGQUIT
case SIGQUIT:
#endif
+#ifdef SIGTERM
+#endif
#ifdef SIGALRM
case SIGALRM:
#endif
e$B$J$+$@$G$9!#e(B
At Thu, 8 Mar 2007 17:10:53 +0900,
Hidetoshi NAGAI wrote in [ruby-dev:30505]:
kill e$B$GAGD>$K;`$s$G$/$l$J$$$N$OLdBj$@$H;W$$$^$9!%e(B
e$B$9$$$^$;$s!"$?$7$+$K$^$:$$$G$9!#e(B
e$BC1=c$K$O$3$&$G$7$g$&$+!)e(B
e$B%a%C%;!<%8$,e(B “ruby: SIGTERM (SignalException)” e$B$H$J$C$F$7$^$&$N$,e(B
e$B>/$73J9%0-$$5$$b$7$^$9$,!%!%!%e(B
e$B$I$&$J$k$N$,$$$$$s$G$7$g$&!#%H%C%W%l%Y%k$^$GH4$1$?$H$3$m$G!"e(B
SIG_DFLe$B$KLa$7$F:FEYe(Bkill()?
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:30509] Re: [BUG?] SIGTERM
e$B$N<h$j07$$e(B”
on Fri, 9 Mar 2007 01:06:46 +0900, Nobuyoshi N.
[email protected] writes:
|> # e$B%a%C%;!<%8$,e(B “ruby: SIGTERM (SignalException)” e$B$H$J$C$F$7$^$&$N$,e(B
|> # e$B>/$73J9%0-$$5$$b$7$^$9$,!%!%!%e(B
|
|e$B$I$&$J$k$N$,$$$$$s$G$7$g$&!#%H%C%W%l%Y%k$^$GH4$1$?$H$3$m$G!"e(B
|SIG_DFLe$B$KLa$7$F:FEYe(Bkill()?
e$B%H%C%W%l%Y%k$GNc30$,e(Brb_eSignale$B$N$H$-!"%a%C%;!<%8$r=P$5$:$K=*e(B
e$BN;$9$k$N$,$h$$$N$G$O$J$$$+$H!#e(B
e$B$J$+$@$G$9!#e(B
At Fri, 9 Mar 2007 07:42:56 +0900,
Yukihiro M. wrote in [ruby-dev:30510]:
|> # e$B%a%C%;!<%8$,e(B “ruby: SIGTERM (SignalException)” e$B$H$J$C$F$7$^$&$N$,e(B
|> # e$B>/$73J9%0-$$5$$b$7$^$9$,!%!%!%e(B
|
|e$B$I$&$J$k$N$,$$$$$s$G$7$g$&!#%H%C%W%l%Y%k$^$GH4$1$?$H$3$m$G!"e(B
|SIG_DFLe$B$KLa$7$F:FEYe(Bkill()?
e$B%H%C%W%l%Y%k$GNc30$,e(Brb_eSignale$B$N$H$-!"%a%C%;!<%8$r=P$5$:$K=*e(B
e$BN;$9$k$N$,$h$$$N$G$O$J$$$+$H!#e(B
e$B?F%W%m%;%9$G$Oe(BWIFSIGNALEDe$B$H$+e(BWTERMSIGe$B$,<h$l$k$3$H$r4|BT$7$F$$$ke(B
e$B$N$G$O$J$$$+$H;W$C$?$s$G$9$,!"$=$3$^$G$OI,MW$J$7e(B?
e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B
In message “Re: [ruby-dev:30513] Re: [BUG?] SIGTERM
e$B$N<h$j07$$e(B”
on Fri, 9 Mar 2007 09:22:07 +0900, Nobuyoshi N.
[email protected] writes:
|> e$B%H%C%W%l%Y%k$GNc30$,e(Brb_eSignale$B$N$H$-!“%a%C%;!<%8$r=P$5$:$K=*e(B
|> e$BN;$9$k$N$,$h$$$N$G$O$J$$$+$H!#e(B
|
|e$B?F%W%m%;%9$G$Oe(BWIFSIGNALEDe$B$H$+e(BWTERMSIGe$B$,<h$l$k$3$H$r4|BT$7$F$$$ke(B
|e$B$N$G$O$J$$$+$H;W$C$?$s$G$9$,!”$=$3$^$G$OI,MW$J$7e(B?
e$B$$$d!"e(Berror_printe$B$,%a%C%;!<%8$rI=<($7$J$$$@$1$G!“e(Brescuee$B$9$le(B
e$B$PJaB*$G$-$k$H;W$$$^$9!#$C$F!”$=$&$$$&0UL#$8$c$J$$!)e(B
e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B
From: Nobuyoshi N. [email protected]
Subject: [ruby-dev:30513] Re: [BUG?] SIGTERM e$B$N<h$j07$$e(B
Date: Fri, 9 Mar 2007 09:22:07 +0900
Message-ID:
[email protected]
e$B?F%W%m%;%9$G$Oe(BWIFSIGNALEDe$B$H$+e(BWTERMSIGe$B$,<h$l$k$3$H$r4|BT$7$F$$$ke(B
e$B$N$G$O$J$$$+$H;W$C$?$s$G$9$,!"$=$3$^$G$OI,MW$J$7e(B?
e$BI,MW$J$N$G$7$g$&$M!%e(B
e$B:G=i$Oe(B exit(SIGTERM) e$B$G$b$$$$$N$+$J$H$b;W$$$^$7$?$,e(B
(^^;e$B!$e(B
e$B3N$+$Ke(B SIG_DFL e$B$G;OKv$7$F$b$i$o$J$$$H6q9g$$$,0-$=$&$G$9!%e(B
e$B!V$8$c$“e(B HUP, QUIT e$B$O$$$$$N$+!)!W$C$FOC$b$”$j$^$9$,!%!%!%e(B
e$B$J$+$@$G$9!#e(B
At Fri, 9 Mar 2007 10:42:22 +0900,
Hidetoshi NAGAI wrote in [ruby-dev:30516]:
e$B$N$G$O$J$$$+$H;W$C$?$s$G$9$,!"$=$3$^$G$OI,MW$J$7e(B?
e$BI,MW$J$N$G$7$g$&$M!%e(B
e$B:G=i$Oe(B exit(SIGTERM) e$B$G$b$$$$$N$+$J$H$b;W$$$^$7$?$,e(B (^^;e$B!$e(B
e$B3N$+$Ke(B SIG_DFL e$B$G;OKv$7$F$b$i$o$J$$$H6q9g$$$,0-$=$&$G$9!%e(B
e$B!V$8$c$“e(B HUP, QUIT e$B$O$$$$$N$+!)!W$C$FOC$b$”$j$^$9$,!%!%!%e(B
SignalExceptione$B$He(BInterrupte$B$N4X78$,HyL/$G$9$,!#e(B
$ trap “:” 2
$ for sig in HUP INT QUIT TERM; do
echo $sig; ./ruby -esleep & usleep 100000; kill -$sig $!; fg
echo $?; echo ----------
done
HUP
[1] 25936
./ruby -esleep
e$B%O%s%0%"%C%We(B
129
INT
[1] 25938
./ruby -esleep
-e:1:in `sleep’: Interrupt
from -e:1
130
QUIT
[1] 25940
./ruby -esleep
e$B=*N;e(B (core dumped)
131
TERM
[1] 25943
./ruby -esleep
e$B=*N;$7$^$7$?e(B
143
Index: intern.h
— intern.h (revision 12021)
+++ intern.h (working copy)
@@ -212,5 +212,5 @@ VALUE rb_thread_create _((VALUE ()(ANYA
void rb_thread_interrupt _((void));
void rb_thread_trap_eval _((VALUE, int, int));
-void rb_thread_signal_raise _((char));
+void rb_thread_signal_raise _((int));
void rb_thread_signal_exit _((void));
int rb_thread_select _((int, fd_set *, fd_set *, fd_set *, struct
timeval *));
@@ -395,4 +395,5 @@ void rb_trap_exit _((void));
void rb_trap_exec _((void));
const char ruby_signal_name _((int));
+void ruby_default_signal _((int));
/ sprintf.c /
VALUE rb_f_sprintf _((int, VALUE));
Index: eval.c
— eval.c (revision 12021)
+++ eval.c (working copy)
@@ -1493,4 +1493,7 @@ error_handle(ex)
status = sysexit_status(ruby_errinfo);
}
- if (err && rb_obj_is_kind_of(err, rb_eSystemExit)) {
- VALUE st = rb_iv_get(err, “status”);
- return NUM2INT(st);
- if (err) {
- if (rb_obj_is_kind_of(err, rb_eSystemExit)) {
-
VALUE st = rb_iv_get(err, "status");
-
return NUM2INT(st);
- }
- else if (rb_obj_is_kind_of(err, rb_eSignal)) {
-
VALUE sig = rb_iv_get(err, "signo");
-
ruby_default_signal(NUM2INT(sig));
- }
}
return ex;
@@ -10156,5 +10165,4 @@ static NODE *th_raise_node;
static VALUE th_cmd;
static int th_sig, th_safe;
-static char *th_signm;
#define RESTORE_NORMAL 1
@@ -10262,5 +10270,5 @@ rb_thread_switch(n)
break;
case RESTORE_SIGNAL:
- rb_raise(rb_eSignal, “SIG%s”, th_signm);
- rb_thread_signal_raise(th_sig);
break;
case RESTORE_EXIT:
@@ -12263,11 +12271,13 @@ rb_thread_interrupt()
void
rb_thread_signal_raise(sig)
- if (sig == 0) return; /* should not happen */
rb_thread_critical = 0;
if (curr_thread == main_thread) {
- VALUE argv[1];
- rb_thread_ready(curr_thread);
- rb_raise(rb_eSignal, “SIG%s”, sig);
- argv[0] = INT2FIX(sig);
- rb_exc_raise(rb_class_new_instance(1, argv, rb_eSignal));
}
rb_thread_ready(main_thread);
@@ -12277,5 +12287,5 @@ rb_thread_signal_raise(sig)
}
}
- th_sig = sig;
curr_thread = main_thread;
rb_thread_restore_context(curr_thread, RESTORE_SIGNAL);
Index: signal.c
===================================================================
— signal.c (revision 12021)
+++ signal.c (working copy)
@@ -171,5 +171,5 @@ static struct signals {
static int
signm2signo(nm)
- const char *nm;
{
struct signals *sigs;
@@ -201,4 +201,91 @@ ruby_signal_name(no)
/*
-
-
- SignalException.new(sig) => signal_exception
-
-
- Construct a new SignalException object. +sig+ should be a known
-
- signal name, or a signal number.
- */
-
+static VALUE
+esignal_init(argc, argv, self)
- int argc;
- VALUE *argv;
- VALUE self;
+{
- int argnum = 1;
- VALUE sig = Qnil;
- int signo;
- const char *signm;
- char tmpnm[(sizeof(int)*CHAR_BIT)/3+4];
-
- if (argc > 0) {
- sig = argv[0];
- if (FIXNUM_P(sig)) argnum = 2;
- }
- if (argc < 1 || argnum < argc) {
- rb_raise(rb_eArgError, “wrong number of arguments (%d for %d)”,
-
argc, argnum);
- }
- if (argnum == 2) {
- signo = FIX2INT(sig);
- if (signo < 0 || signo > NSIG) {
-
rb_raise(rb_eArgError, "invalid signal number (%d)", signo);
- }
- if (argc > 1) {
-
sig = argv[1];
- }
- else {
-
signm = signo2signm(signo);
-
if (signm) {
- snprintf(tmpnm, sizeof(tmpnm), “SIG%s”, signm);
-
}
-
else {
- snprintf(tmpnm, sizeof(tmpnm), “SIG%u”, signo);
-
}
-
sig = rb_str_new2(signm = tmpnm);
- }
- }
- else {
- signm = SYMBOL_P(sig) ? rb_id2name(SYM2ID(sig)) :
StringValuePtr(sig);
- if (strncmp(signm, “SIG”, 3) == 0) signm += 3;
- signo = signm2signo(signm);
- if (!signo) {
-
rb_raise(rb_eArgError, "unsupported name `SIG%s'", signm);
- }
- if (SYMBOL_P(sig)) {
-
sig = rb_str_new2(signm);
- }
- }
- rb_call_super(1, &sig);
- rb_iv_set(self, “signo”, INT2NUM(signo));
-
- return self;
+}
-
+static VALUE
+interrupt_init(self, mesg)
- VALUE self, mesg;
+{
- VALUE argv[2];
-
- argv[0] = INT2FIX(SIGINT);
- argv[1] = mesg;
- return rb_call_super(2, argv);
+}
-
+void
+ruby_default_signal(sig)
- int sig;
+{
+#ifndef MACOS_UNUSE_SIGNAL
- extern rb_pid_t getpid _((void));
-
- signal(sig, SIG_DFL);
- kill(getpid(), sig);
+#endif
+}
-
+/*
@@ -414,4 +501,7 @@ signal_exec(sig)
case SIGQUIT:
#endif
+#ifdef SIGTERM
- case SIGTERM:
+#endif
#ifdef SIGALRM
case SIGALRM:
@@ -423,5 +513,5 @@ signal_exec(sig)
case SIGUSR2:
#endif
-
rb_thread_signal_raise(sig);
break;
}
@@ -681,4 +771,7 @@ trap(arg)
case SIGQUIT:
#endif
+#ifdef SIGTERM
-
case SIGTERM:
+#endif
#ifdef SIGALRM
case SIGALRM:
@@ -976,4 +1069,9 @@ Init_signal()
rb_define_module_function(mSignal, “list”, sig_list, 0);
-
rb_define_method(rb_eSignal, “initialize”, esignal_init, -1);
-
rb_attr(rb_eSignal, rb_intern(“signo”), 1, 0, 0);
-
rb_alias(rb_eSignal, rb_intern(“signm”), rb_intern(“message”));
-
rb_define_method(rb_eInterrupt, “initialize”, interrupt_init, 1);
-
install_sighandler(SIGINT, sighandler);
#ifdef SIGHUP
e$B$J$+$@$G$9!#e(B
ChangeLoge$B%(%s%H%j$r$D$1$F$^$;$s$G$7$?!#e(B
-
eval.c (error_handle): no message when exiting by signal.
-
eval.c (ruby_cleanup): re-send signal. [ruby-dev:30516]
-
eval.c (rb_thread_interrupt): instantiate SignalException.
-
eval.c (rb_thread_signal_raise): now takes signal number instead
of signal name.
-
intern.h (rb_thread_signal_raise, ruby_default_signal): prototypes.
-
signal.c (esignal_init): takes a signal number and an optional
signal name.
-
signal.c (interrupt_init): pass SIGINT always.
-
signal.c (ruby_default_signal): invoke system default signal
handler.
-
signal.c (rb_signal_exec, trap): handle SIGTERM. [ruby-dev:30505]
e$B$D$$$G$Ke(B1.9e$BMQ!#e(B
-
eval.c (ruby_cleanup): re-send signal. [ruby-dev:30516]
-
eval_error.h (error_handle): no message when exiting by signal.
-
intern.h (rb_thread_signal_raise, ruby_default_signal): prototypes.
-
signal.c (esignal_init): takes a signal number and an optional
signal name.
-
signal.c (interrupt_init): pass SIGINT always.
-
signal.c (ruby_default_signal): invoke system default signal
handler.
-
signal.c (rb_signal_exec, trap): handle SIGTERM. [ruby-dev:30505]
-
thread.c (rb_thread_signal_raise): now takes signal number instead
of signal name.
-
thread.c (rb_thread_signal_exit): since rb_make_exception() calls
#exception method, rb_class_new_instance() is not needed here.
Index: eval.c
— eval.c (revision 12021)
+++ eval.c (working copy)
@@ -177,16 +177,18 @@ int
ruby_cleanup(int ex)
{
-
int state, exit_code = 0, signo = 0;
volatile VALUE err = GET_THREAD()->errinfo;
rb_vm_t *vm = GET_THREAD()->vm;
/* th->errinfo contains a NODE while break’ing */
- if (RTEST(err) && (TYPE(err) != T_NODE) &&
- rb_obj_is_kind_of(err, rb_eSystemExit)) {
- vm->exit_code = NUM2INT(rb_iv_get(err, “status”));
- }
- else {
- vm->exit_code = 0;
-
if (RTEST(err) && (TYPE(err) != T_NODE)) {
-
if (rb_obj_is_kind_of(err, rb_eSystemExit)) {
-
exit_code = NUM2INT(rb_iv_get(err, "status"));
-
}
-
else if (rb_obj_is_kind_of(err, rb_eSignal)) {
-
signo = NUM2INT(rb_iv_get(err, "signo"));
-
}
}
-
vm->exit_code = exit_code;
GET_THREAD()->safe_level = 0;
@@ -208,4 +210,7 @@ ruby_cleanup(int ex)
POP_THREAD_TAG();
-
if (signo) {
-
ruby_default_signal(signo);
-
}
if (vm->exit_code) {
return vm->exit_code;
Index: eval_error.h
===================================================================
— eval_error.h (revision 12021)
+++ eval_error.h (working copy)
@@ -3,4 +3,7 @@
*/
+#ifndef RUBY_EVAL_ERROR_H
+#define RUBY_EVAL_ERROR_H
+
#define SET_CURRENT_SOURCE() ((void)0)
@@ -200,4 +203,5 @@ error_handle(int ex)
int status = EXIT_FAILURE;
rb_thread_t *th = GET_THREAD();
+#endif /* RUBY_EVAL_ERROR_H */
Index: intern.h
— intern.h (revision 12021)
+++ intern.h (working copy)
@@ -278,5 +278,5 @@ VALUE rb_thread_kill(VALUE);
VALUE rb_thread_create(VALUE ()(ANYARGS), void);
void rb_thread_trap_eval(VALUE, int, int);
-void rb_thread_signal_raise(void , const char); /* should pass
literal */
+void rb_thread_signal_raise(void *, int);
void rb_thread_signal_exit(void *);
int rb_thread_select(int, fd_set *, fd_set *, fd_set *, struct timeval
*);
@@ -475,4 +475,5 @@ void rb_trap_exit(void);
void rb_trap_exec(void);
const char ruby_signal_name(int);
+void ruby_default_signal(int);
/ sprintf.c /
VALUE rb_f_sprintf(int, const VALUE);
Index: signal.c
— signal.c (revision 12021)
+++ signal.c (working copy)
@@ -198,4 +198,82 @@ ruby_signal_name(int no)
/*
-
-
- SignalException.new(sig) => signal_exception
-
-
- Construct a new SignalException object. +sig+ should be a known
-
- signal name, or a signal number.
- */
-
+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;
- }
- if (argc < 1 || argnum < argc) {
- rb_raise(rb_eArgError, “wrong number of arguments (%d for %d)”,
-
argc, 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 {
-
signm = signo2signm(signo);
-
if (signm) {
- sig = rb_sprintf(“SIG%s”, signm);
-
}
-
else {
- sig = rb_sprintf(“SIG%u”, signo);
-
}
- }
- }
- else {
- signm = SYMBOL_P(sig) ? rb_id2name(SYM2ID(sig)) :
StringValuePtr(sig);
- if (strncmp(signm, “SIG”, 3) == 0) signm += 3;
- signo = signm2signo(signm);
- if (!signo) {
-
rb_raise(rb_eArgError, "unsupported name `SIG%s'", signm);
- }
- if (SYMBOL_P(sig)) {
-
sig = rb_str_new2(signm);
- }
- }
- rb_call_super(1, &sig);
- rb_iv_set(self, “signo”, INT2NUM(signo));
-
- return self;
+}
-
+static VALUE
+interrupt_init(VALUE self, VALUE mesg)
+{
- VALUE argv[2];
-
- argv[0] = INT2FIX(SIGINT);
- argv[1] = mesg;
- return rb_call_super(2, argv);
+}
-
+void
+ruby_default_signal(int sig)
+{
+#ifndef MACOS_UNUSE_SIGNAL
- signal(sig, SIG_DFL);
- kill(getpid(), sig);
+#endif
+}
-
+/*
@@ -499,4 +577,7 @@ rb_signal_exec(rb_thread_t *th, int sig)
case SIGQUIT:
#endif
+#ifdef SIGTERM
- case SIGTERM:
+#endif
#ifdef SIGALRM
case SIGALRM:
@@ -508,5 +589,5 @@ rb_signal_exec(rb_thread_t *th, int sig)
case SIGUSR2:
#endif
-
rb_thread_signal_raise(th, sig);
break;
}
@@ -639,4 +720,7 @@ trap(struct trap_arg *arg)
case SIGQUIT:
#endif
+#ifdef SIGTERM
-
case SIGTERM:
+#endif
#ifdef SIGALRM
case SIGALRM:
@@ -899,4 +983,9 @@ Init_signal(void)
rb_define_module_function(mSignal, “list”, sig_list, 0);
-
rb_define_method(rb_eSignal, “initialize”, esignal_init, -1);
-
rb_attr(rb_eSignal, rb_intern(“signo”), 1, 0, 0);
-
rb_alias(rb_eSignal, rb_intern(“signm”), rb_intern(“message”));
-
rb_define_method(rb_eInterrupt, “initialize”, interrupt_init, 1);
-
install_sighandler(SIGINT, sighandler);
#ifdef SIGHUP
Index: thread.c
===================================================================
— thread.c (revision 12021)
+++ thread.c (working copy)
@@ -753,16 +753,12 @@ rb_thread_raise(int argc, VALUE *argv, r
void
-rb_thread_signal_raise(void *thptr, const char *sig)
+rb_thread_signal_raise(void *thptr, int sig)
{
- VALUE argv[1];
- char buf[BUFSIZ];
- VALUE argv[2];
rb_thread_t *th = thptr;
-
- if (sig == 0) {
- return; /* should not happen */
- }
- snprintf(buf, BUFSIZ, “SIG%s”, sig);
- argv[0] = rb_exc_new3(rb_eSignal, rb_str_new2(buf));
- rb_thread_raise(1, argv, th->vm->main_thread);
-
- argv[0] = rb_eSignal;
- argv[1] = INT2FIX(sig);
- rb_thread_raise(2, argv, th->vm->main_thread);
}
@@ -770,12 +766,10 @@ void
rb_thread_signal_exit(void *thptr)
{
- VALUE argv[1];
- VALUE args[2];
- VALUE argv[2];
rb_thread_t *th = thptr;
-
- args[0] = INT2NUM(EXIT_SUCCESS);
- args[1] = rb_str_new2(“exit”);
- argv[0] = rb_class_new_instance(2, args, rb_eSystemExit);
- rb_thread_raise(1, argv, th->vm->main_thread);
-
- argv[0] = rb_eSystemExit;
- argv[1] = rb_str_new2(“exit”);
- rb_thread_raise(2, argv, th->vm->main_thread);
}
At Sat, 10 Mar 2007 06:14:45 +0900,
Nobuyoshi N. wrote:
親プãƒã‚»ã‚¹ã§ã¯WIFSIGNALEDã¨ã‹WTERMSIGãŒå–れるã“ã¨ã‚’期待ã—ã¦ã„ã‚‹
ã®ã§ã¯ãªã„ã‹ã¨æ€ã£ãŸã‚“ã§ã™ãŒã€ãã“ã¾ã§ã¯å¿…è¦ãªã—?
å¿…è¦ãªã®ã§ã—ょã†ã.
最åˆã¯ exit(SIGTERM) ã§ã‚‚ã„ã„ã®ã‹ãªã¨ã‚‚æ€ã„ã¾ã—ãŸãŒ (^^;,
確ã‹ã« SIG_DFL ã§å§‹æœ«ã—ã¦ã‚‚らã‚ãªã„ã¨å…·åˆã„ãŒæ‚ªãã†ã§ã™ï¼Ž
「ã˜ã‚ƒã‚ HUP, QUIT ã¯ã„ã„ã®ã‹ï¼Ÿã€ã£ã¦è©±ã‚‚ã‚ã‚Šã¾ã™ãŒï¼Žï¼Žï¼Ž
SignalExceptionã¨Interruptã®é–¢ä¿‚ãŒå¾®å¦™ã§ã™ãŒã€‚
 手元ã§ã‚‚テストã—ã¾ã—ãŸã€‚1.8 ã¸ã®ã‚³ãƒŸãƒƒãƒˆã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚
–
/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp
“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”
e$B1J0fe(B@e$BCNG=!%6e9)Bg$G$9!%e(B
From: Nobuyoshi N. [email protected]
Subject: [ruby-dev:30519] Re: [BUG?] SIGTERM e$B$N<h$j07$$e(B
Date: Sat, 10 Mar 2007 06:14:45 +0900
Message-ID:
[email protected]
SignalExceptione$B$He(BInterrupte$B$N4X78$,HyL/$G$9$,!#e(B
e$B40A4$K=PCY$l$F$7$^$$$^$7$?$,!$F0:n$r3NG’$7$^$7$?!%e(B
e$B$"$j$,$H$&$4$6$$$^$7$?!%e(B