# Trap(sig, "SYSTEM\_DEFAULT")

**URL:** <https://www.ruby-forum.com/t/trap-sig-system-default/106923>\
**Category:** Development\
**Created:** [June 15, 2007, 12:48pm UTC](https://www.ruby-forum.com/t/trap-sig-system-default/106923 "2007-06-15T12:48:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 15, 2007, 12:48pm UTC](https://www.ruby-forum.com/t/trap-sig-system-default/106923/1 "2007-06-15T12:48:26Z")

</div>

e$B$H$-$\*$j!"%G%P%C%0$NET9g$K$h$j!“e(BSIGSEGV e$B$de(B SIGBUS  
e$B$KBP$9$ke(B  
signal handler e$B$re(B SIG\_DFL e$B$K$7$?$$$3$H$,$”$k$N$G$9$,!"e(BRuby  
e$B$Ne(B trap e$B$O$=$l$r5v$7$F$/$l$^$;$s!#e(B

trap e$B$Ge(B “SIG\_DFL” e$B$H;XDj$7$F$b!"e(BRuby  
e$B$N%G%U%)%k%H$N!“e(B[BUG]  
e$B$H=P$F$/$ke(B signal handler e$B$,@\_Dj$5$l$F$7$^$$$^$9!#e(B  
e$B$=$N$?$a!“e(Bcore e$B$,$^$H$b$K:n$l$:!”%G%P%C%0$,Lq2p$J\>l9g$,$”$je(B  
e$B$^$9!#e(B

e$B$=$3$G!"e(Btrap e$B$Ge(B “SYSTEM\_DEFAULT” e$B$H;XDj$9$k$HK\Ev$Ke(B  
SIG\_DFL  
e$B$K$J$k$h$&$K$7$F$\_$?$N$G$9$,$I$&$G$7$g$&$+!#e(B

e$B$^$?!"e(Btrap e$B$N@bL@$K!“e(BSIG\_DFL e$B$Ge(B the operating system’s  
default handler e$B$K$J$k$H=q$$$F$”$k$N$O13$@$H;W$$$^$9!#e(B

# Index: signal.c

— signal.c (e$B%j%S%8%g%se(B 12550)  
+++ signal.c (e$B:n6H%3%T!\<e(B)  
@@ -634,13 +634,62 @@  
VALUE cmd;  
};

+static sighandler\_t  
+default\_handler(int sig)  
+{

- sighandler\_t func;
- switch (sig) {
- 

```
 case SIGINT:

```

+#ifdef SIGHUP

- 

```
 case SIGHUP:

```

+#endif  
+#ifdef SIGQUIT

- 

```
 case SIGQUIT:

```

+#endif  
+#ifdef SIGTERM

- 

```
 case SIGTERM:

```

+#endif  
+#ifdef SIGALRM

- 

```
 case SIGALRM:

```

+#endif  
+#ifdef SIGUSR1

- 

```
 case SIGUSR1:

```

+#endif  
+#ifdef SIGUSR2

- 

```
 case SIGUSR2:

```

+#endif

- 

```
   func = sighandler;

```

- 

```
   break;

```

+#ifdef SIGBUS

- 

```
 case SIGBUS:

```

- 

```
   func = sigbus;

```

- 

```
   break;

```

+#endif  
+#ifdef SIGSEGV

- 

```
 case SIGSEGV:

```

- 

```
   func = sigsegv;

```

- 

```
   break;

```

+#endif  
+#ifdef SIGPIPE

- 

```
 case SIGPIPE:

```

- 

```
   func = sigpipe;

```

- 

```
   break;

```

+#endif

- 

```
 default:

```

- 

```
   func = SIG_DFL;

```

- 

```
   break;

```

- }
- 
- return func;  
+}
- 

static RETSIGTYPE  
wrong\_trap(int sig)  
{  
}

static sighandler\_t  
-trap\_handler(VALUE \*cmd)  
+trap\_handler(VALUE _cmd, int sig)  
{  
sighandler\_t func = wrong\_trap;  
VALUE command;  
@@ -654,22 +703,32 @@  
SafeStringValue(command); /_ taint check \*/  
switch (RSTRING\_LEN(command)) {  
case 0:

- func = SIG\_IGN;

- 

```
           goto sig_ign;

```

break;
- 

```
         case 14:

```

- if (strncmp(RSTRING\_PTR(command), “SYSTEM\_DEFAULT”, 14) == 0) {
- 

```
               func = SIG_DFL;

```

- 

```
               *cmd = 0;

```

- }
- 

```
           break;
   case 7:

```

if (strncmp(RSTRING\_PTR(command), “SIG\_IGN”, 7) == 0) {

- 

```
   func = SIG_IGN;

```

+sig\_ign:

- 

```
               func = SIG_IGN;

```

- 

```
               *cmd = 0;

```

}  
else if (strncmp(RSTRING\_PTR(command), “SIG\_DFL”, 7) == 0) {

- 

```
   func = SIG_DFL;

```

+sig\_dfl:

- 

```
               func = default_handler(sig);

```

- 

```
               *cmd = 0;

```

}  
else if (strncmp(RSTRING\_PTR(command), “DEFAULT”, 7) == 0) {

- 

```
   func = SIG_DFL;

```

- 

```
               goto sig_dfl;

```

}  
break;  
case 6:  
if (strncmp(RSTRING\_PTR(command), “IGNORE”, 6) == 0) {

- 

```
   func = SIG_IGN;

```

- 

```
               goto sig_ign;

```

}  
break;  
case 4:  
@@ -689,9 +748,6 @@  
func = sighandler;  
}  
}

- if (func == SIG\_IGN || func == SIG\_DFL) {

- \*cmd = 0;

- }

-static sighandler\_t  
-default\_handler(sighandler\_t func, int sig)  
-{

- if (func == SIG\_DFL) {
- switch (sig) {
- case SIGINT:  
-#ifdef SIGHUP
- case SIGHUP:  
-#endif  
-#ifdef SIGQUIT
- case SIGQUIT:  
-#endif  
-#ifdef SIGTERM
- case SIGTERM:  
-#endif  
-#ifdef SIGALRM
- case SIGALRM:  
-#endif  
-#ifdef SIGUSR1
- case SIGUSR1:  
-#endif  
-#ifdef SIGUSR2
- case SIGUSR2:  
-#endif
- 

```
 func = sighandler;

```

- 

```
 break;

```

-#ifdef SIGBUS

- case SIGBUS:
- 

```
 func = sigbus;

```

- 

```
 break;

```

-#endif  
-#ifdef SIGSEGV

- case SIGSEGV:
- 

```
 func = sigsegv;

```

- 

```
 break;

```

-#endif  
-#ifdef SIGPIPE

- case SIGPIPE:
- 

```
 func = sigpipe;

```

- 

```
 break;

```

-#endif

- }
- }
- 
- return func;  
-}
- 

static VALUE  
trap(struct trap\_arg \*arg)  
{  
@@ -851,10 +860,12 @@

- signal name. The command or block specifies code to be run when the
- signal is raised. If the command is the string ``IGNORE’’ or
- ``SIG\_IGN’’, the signal will be ignored. If the command is

- 
  - `DEFAULT'' or`SIG\_DFL’’, the operating system’s default handler

- 
  - `DEFAULT'' or`SIG\_DFL’’, the Ruby’s default handler
  - will be invoked. If the command is ``EXIT’’, the script will be
  - terminated by the signal. Otherwise, the given command or block
  - will be run.

- 
  - If the command is ``SYSTEM\_DEFAULT’’, the operating system’s default

- 
  - handler will be invoked.
  - The special signal name ``EXIT’’ or signal number zero will be
  - invoked just prior to program termination.
  - trap returns the previous handler for the given signal.  
@@ -885,7 +896,7 @@  
}  
else if (argc == 2) {  
arg.cmd = argv[1];

- arg.func = default\_handler(trap\_handler(&arg.cmd), arg.sig);

- arg.func = trap\_handler(&arg.cmd, arg.sig);  
}

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [June 15, 2007, 3:33pm UTC](https://www.ruby-forum.com/t/trap-sig-system-default/106923/2 "2007-06-15T15:33:00Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:30999] trap(sig, “SYSTEM\_DEFAULT”)”  
on Fri, 15 Jun 2007 19:46:07 +0900, Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|e$B$H$-$\*$j!"%G%P%C%0$NET9g$K$h$j!“e(BSIGSEGV e$B$de(B SIGBUS e$B$KBP$9$ke(B  
|signal handler e$B$re(B SIG\_DFL e$B$K$7$?$$$3$H$,$”$k$N$G$9$,!"e(BRuby  
|e$B$Ne(B trap e$B$O$=$l$r5v$7$F$/$l$^$;$s!#e(B

e$B$J$k$[$I!#e(B

|trap e$B$Ge(B “SIG\_DFL” e$B$H;XDj$7$F$b!"e(BRuby e$B$N%G%U%)%k%H$N!"e(B[BUG]  
|e$B$H=P$F$/$ke(B signal handler e$B$,@_Dj$5$l$F$7$^$$$^$9!#e(B  
|e$B$=$N$?$a!“e(Bcore e$B$,$^$H$b$K:n$l$:!”%G%P%C%0$,Lq2p$J\>l9g$,$"$je(B  
|e$B$^$9!#e(B  
|  
|e$B$=$3$G!"e(Btrap e$B$Ge(B “SYSTEM\_DEFAULT” e$B$H;XDj$9$k$HK\Ev$Ke(B SIG\_DFL  
|e$B$K$J$k$h$&$K$7$F$_$?$N$G$9$,$I$&$G$7$g$&$+!#e(B  
|  
|e$B$^$?!"e(Btrap e$B$N@bL@$K!“e(BSIG\_DFL e$B$Ge(B the operating system’s  
|default handler e$B$K$J$k$H=q$$$F$”$k$N$O13$@$H;W$$$^$9!#e(B

e$B%3%\_%C%H$7$F$/$@$5$$$^$;!#e(B
