<HTML>
<HEAD>
<link rel="SHORTCUT ICON" href="http://www.cons.org/favicon.ico">
<TITLE>Proper handling of SIGINT/SIGQUIT [http://www.cons.org/cracauer/sigint.html]</TITLE>
<!-- Created by: GNU m4 using $Revision: 1.20 $ of crawww.m4lib on 11-Feb-2005 -->
<BODY BGCOLOR="#fff8e1">
<CENTER><H2>Proper handling of SIGINT/SIGQUIT</H2></CENTER>
<img src=linie.png width="100%" alt=" ">
<P>

<table border=1 cellpadding=4>
<tr><th valign=top align=left>Abstract: </th>
<td valign=top align=left>
In UNIX terminal sessions, you usually have a key like
<code>C-c</code> (Control-C) to immediately end whatever program you
have running in the foreground. This should work even when the program
you called has called other programs in turn. Everything should be
aborted, giving you your command prompt back, no matter how deep the
call stack is.

<p>Basically, it's trivial. But the existence of interactive
applications that use SIGINT and/or SIGQUIT for other purposes than a
complete immediate abort make matters complicated, and - as was to
expect - left us with several ways to solve the problems. Of course,
existing shells and applications follow different ways.

<P>This Web pages outlines different ways to solve the problem and
argues that only one of them can do everything right, although it
means that we have to fix some existing software.



</td></tr><tr><th valign=top align=left>Intended audience: </th>
<td valign=top align=left>Programmers who implement programs that catch SIGINT/SIGQUIT.
<BR>Programmers who implements shells or shell-like programs that
execute batches of programs.

<p>Users who have problems problems getting rid of runaway shell
scripts using <code>Control-C</code>. Or have interactive applications
that don't behave right when sending SIGINT. Examples are emacs'es
that die on Control-g or shellscript statements that sometimes are
executed and sometimes not, apparently not determined by the user's
intention. 


</td></tr><tr><th valign=top align=left>Required knowledge: </th>
<td valign=top align=left>You have to know what it means to catch SIGINT or SIGQUIT and how
processes are waiting for other processes (childs) they spawned.


</td></tr></table>
<img src=linie.png width="100%" alt=" ">


<H3>Basic concepts</H3>

What technically happens when you press Control-C is that all programs
running in the foreground in your current terminal (or virtual
terminal) get the signal SIGINT sent.

<p>You may change the key that triggers the signal using
<code>stty</code> and running programs may remap the SIGINT-sending
key at any time they like, without your intervention and without
asking you first.

<p>The usual reaction of a running program to SIGINT is to exit.
However, not all program do an exit on SIGINT, programs are free to
use the signal for other actions or to ignore it at all.

<p>All programs running in the foreground receive the signal. This may
be a nested "stack" of programs: You started a program that started
another and the outer is waiting for the inner to exit. This nesting
may be arbitrarily deep.

<p>The innermost program is the one that decides what to do on SIGINT.
It may exit, do something else or do nothing. Still, when the user hit
SIGINT, all the outer programs are awaken, get the signal and may
react on it.

<H3>What we try to achieve</H3>

The problem is with shell scripts (or similar programs that call
several subprograms one after another).

<p>Let us consider the most basic script:
<PRE>
#! /bin/sh
program1
program2
</PRE>
and the usual run looks like this:
<PRE>
$ sh myscript
[output of program1]
[output of program2]
$
</PRE>

<p>Let us assume that both programs do nothing special on SIGINT, they
just exit.

<p>Now imagine the user hits C-c while a shellscript is executing its
first program. The following programs receive SIGINT: program1 and
also the shell executing the script. program1 exits. 

<p>But what should the shell do? If we say that it is only the
innermost's programs business to react on SIGINT, the shell will do
nothing special (not exit) and it will continue the execution of the
script and run program2. But this is wrong: The user's intention in
hitting C-c is to abort the whole script, to get his prompt back. If
he hits C-c while the first program is running, he does not want
program2 to be even started.

<p>here is what would happen if the shell doesn't do anything:
<PRE>
$ sh myscript
[first half of program1's output]
C-c   [users presses C-c]
[second half of program1's output will not be displayed]
[output of program2 will appear]
</PRE>


<p>Consider a more annoying example:
<pre>
#! /bin/sh
# let's assume there are 300 *.dat files
for file in *.dat ; do
	dat2ascii $dat
done
</pre>

If your shell wouldn't end if the user hits <code>C-c</code>,
<code>C-c</code> would just end <strong>one</strong> dat2ascii run and
the script would continue. Thus, you had to hit <code>C-c</code> up to
300 times to end this script.

<H3>Alternatives to do so</H3>

<p>There are several ways to handle abortion of shell scripts when
SIGINT is received while a foreground child runs:

<menu>

<li>As just outlined, the shellscript may just continue, ignoring the
fact that the user hit <code>C-c</code>. That way, your shellscript -
including any loops - would continue and you had no chance of aborting
it except using the kill command after finding out the outermost
shell's PID. This "solution" will not be discussed further, as it is
obviously not desirable.

<p><li>The shell itself exits immediately when it receives SIGINT. Not
only the program called will exit, but the calling (the
script-executing) shell. The first variant is to exit the shell (and
therefore discontinuing execution of the script) immediately, while
the background program may still be executing (remember that although
the shell is just waiting for the called program to exit, it is woken
up and may act). I will call the way of doing things the "IUE" (for
"immediate unconditional exit") for the rest of this document.

<p><li>As a variant of the former, when the shell receives SIGINT
while it is waiting for a child to exit, the shell does not exit
immediately. but it remembers the fact that a SIGINT happened. After
the called program exits and the shell's wait ends, the shell will
exit itself and hence discontinue the script. I will call the way of
doing things the "WUE" (for "wait and unconditional exit") for the
rest of this document.

<p><li>There is also a way that the calling shell can tell whether the
called program exited on SIGINT and if it ignored SIGINT (or used it
for other purposes). As in the <sl>WUE</sl> way, the shell waits for
the child to complete. It figures whether the program was ended on
SIGINT and if so, it discontinue the script. If the program did any
other exit, the script will be continued. I will call the way of doing
things the "WCE" (for "wait and cooperative exit") for the rest of
this document.

</menu>

<H3>The problem</H3>

On first sight, all three solutions (IUE, WUE and WCE) all seem to do
what we want: If C-c is hit while the first program of the shell
script runs, the script is discontinued. The user gets his prompt back
immediately. So what are the difference between these way of handling
SIGINT?

<p>There are programs that use the signal SIGINT for other purposes
than exiting. They use it as a normal keystroke. The user is expected
to use the key that sends SIGINT during a perfectly normal program
run. As a result, the user sends SIGINT in situations where he/she
does not want the program or the script to end.

<p>The primary example is the emacs editor: C-g does what ESC does in
other applications: It cancels a partially executed or prepared
operation. Technically, emacs remaps the key that sends SIGINT from
C-c to C-g and catches SIGINT.

<p>Remember that the SIGINT is sent to all programs running in the
foreground. If emacs is executing from a shell script, both emacs and
the shell get SIGINT. emacs is the program that decides what to do:
Exit on SIGINT or not. emacs decides not to exit. The problem arises
when the shell draws its own conclusions from receiving SIGINT without
consulting emacs for its opinion.

<p>Consider this script:
<PRE>
#! /bin/sh
emacs /tmp/foo
cp /tmp/foo /home/user/mail/sent
</PRE>

<p>If C-g is used in emacs, both the shell and emacs will received
SIGINT. Emacs will not exit, the user used C-g as a normal editing
keystroke, he/she does not want the script to be aborted on C-g.

<p>The central problem is that the second command (cp) may
unintentionally be killed when the shell draws its own conclusion
about the user's intention. The innermost program is the only one to
judge.

<H3>One more example</H3>

<p>Imagine a mail session using a curses mailer in a tty. You called
your mailer and started to compose a message. Your mailer calls emacs.
<code>C-g</code> is a normal editing key in emacs. Technically it
sends SIGINT (it was <code>C-c</code>, but emacs remapped the key) to
<menu>
<li>emacs
<li>the shell between your mailer and emacs, the one from your mailers
    system("emacs /tmp/bla.44") command
<li>the mailer itself
<li>possibly another shell if your mailer was called by a shell script
or from another application using system(3)
<li>your interactive shell (which ignores it since it is interactive
and hence is not relevant to this discussion)
</menu>

<p>If everyone just exits on SIGINT, you will be left with nothing but
your login shell, without asking.

<p>But for sure you don't want to be dropped out of your editor and
out of your mailer back to the commandline, having your edited data
and mailer status deleted.

<p>Understand the difference: While <code>C-g</code> is used an a kind
of abort key in emacs, it isn't the major "abort everything" key. When
you use <code>C-g</code> in emacs, you want to end some internal emacs
command. You don't want your whole emacs and mailer session to end.

<p>So, if the shell exits immediately if the user sends SIGINT (the
second of the four ways shown above), the parent of emacs would die,
leaving emacs without the controlling tty. The user will lose it's
editing session immediately and unrecoverable. If the "main" shell of
the operating system defaults to this behavior, every editor session
that is spawned from a mailer or such will break (because it is
usually executed by system(3), which calls /bin/sh). This was the case
in FreeBSD before I and Bruce Evans changed it in 1998.

<p>If the shell recognized that SIGINT was sent and exits after the
current foreground process exited (the third way of the four), the
editor session will not be disturbed, but things will still not work
right.

<H3>A further look at the alternatives</H3>

<p>Still considering this script to examine the shell's actions in the
IUE, WUE and ICE way of handling SIGINT:
<PRE>
#! /bin/sh
emacs /tmp/foo
cp /tmp/foo /home/user/mail/sent
</PRE>

<p>The IUE ("immediate unconditional exit") way does not work at all:
emacs wants to survive the SIGINT (it's a normal editing key for
emacs), but its parent shell unconditionally thinks "We received
SIGINT. Abort everything. Now.". The shell will exit even before emacs
exits. But this will leave emacs in an unusable state, since the death
of its calling shell will leave it without required resources (file
descriptors). This way does not work at all for shellscripts that call
programs that use SIGINT for other purposes than immediate exit. Even
for programs that exit on SIGINT, but want to do some cleanup between
the signal and the exit, may fail before they complete their cleanup.

<p>It should be noted that this way has one advantage: If a child
blocks SIGINT and does not exit at all, this way will get control back
to the user's terminal. Since such programs should be banned from your
system anyway, I don't think that weighs against the disadvantages.

<p>WUE ("wait and unconditional exit") is a little more clever: If C-g
was used in emacs, the shell will get SIGINT. It will not immediately
exit, but remember the fact that a SIGINT happened. When emacs ends
(maybe a long time after the SIGINT), it will say "Ok, a SIGINT
happened sometime while the child was executing, the user wants the
script to be discontinued". It will then exit. The cp will not be
executed. But that's bad. The "cp" will be executed when the emacs
session ended without the C-g key ever used, but it will not be
executed when the user used C-g at least one time. That is clearly not
desired. Since C-g is a normal editing key in emacs, the user expects
the rest of the script to behave identically no matter what keys he
used.

<p>As a result, the "WUE" way is better than the "IUE" way in that it
does not break SIGINT-using programs completely. The emacs session
will end undisturbed. But it still does not support scripts where
other actions should be performed after a program that use SIGINT for
non-exit purposes. Since the behavior is basically undeterminable for
the user, this can lead to nasty surprises.

<p>The "WCE" way fixes this by "asking" the called program whether it
exited on SIGINT or not. While emacs receives SIGINT, it does not exit
on it and a calling shell waiting for its exit will not be told that
it exited on SIGINT. (Although it receives SIGINT at some point in
time, the system does not enforce that emacs will exit with
"I-exited-on-SIGINT" status. This is under emacs' control, see below).

<p>this still work for the normal script without SIGINT-using
programs:</p>
<PRE>
#! /bin/sh
program1
program2
</PRE>

Unless program1 and program2 mess around with signal handling, the
system will tell the calling shell whether the programs exited
normally or as a result of SIGINT.

<p>The "WCE" way then has an easy way to things right: When one called
program exited with "I-exited-on-SIGINT" status, it will discontinue
the script after this program. If the program ends without this
status, the next command in the script is started.

<p>It is important to understand that a shell in "WCE" modus does not
need to listen to the SIGINT signal at all. Both in the
"emacs-then-cp" script and in the "several-normal-programs" script, it
will be woken up and receive SIGINT when the user hits the
corresponding key. But the shell does not need to react on this event
and it doesn't need to remember the event of any SIGINT, either.
Telling whether the user wants to end a script is done by asking that
program that has to decide, that program that interprets keystrokes
from the user, the innermost program.

<H3>So everything is well with WCE?</H3>

Well, almost.

<p>The problem with the "WCE" modus is that there are broken programs
that do not properly communicate the required information up to the
calling program.

<p>Unless a program messes with signal handling, the system does this
automatically. 

<p>There are programs that want to exit on SIGINT, but they don't let
the system do the automatic exit, because they want to do some
cleanup. To do so, they catch SIGINT, do the cleanup and then exit by
themselves.

<p>And here is where the problem arises: Once they catch the signal,
the system will no longer communicate the "I-exited-on-SIGINT" status
to the calling program automatically. Even if the program exit
immediately in the signal handler of SIGINT. Once it catches the
signal, it has to take care of communicating the signal status
itself.

<p>Some programs don't do this. On SIGINT, they do cleanup and exit
immediatly, but the calling shell isn't told about the non-normal exit
and it will call the next program in the script.

<p>As a result, the user hits SIGINT and while one program exits, the
shellscript continues. To him/her it looks like the shell fails to
obey to his abortion command.

<p>Both IUE or WUE shell would not have this problem, since they
discontinue the script on their own. But as I said, they don't support
programs using SIGINT for non-exiting purposes, no matter whether
these programs properly communicate their signal status to the calling
shell or not.

<p>Since some shell in wide use implement the WUE way (and some even
IUE), there is a considerable number of broken programs out there that
break WCE shells. The programmers just don't recognize it if their
shell isn't WCE.

<H3>How to be a proper program</H3>

<p>(Short note in advance: What you need to achieve is that
WIFSIGNALED(status) is true in the calling program and that
WTERMSIG(status) returns SIGINT.)

<p>If you don't catch SIGINT, the system automatically does the right
thing for you: Your program exits and the calling program gets the
right "I-exited-on-SIGINT" status after waiting for your exit.

<p>But once you catch SIGINT, you have to act.

<p>Decide whether the SIGINT is used for exit/abort purposes and hence
a shellscript calling this program should discontinue. This is
hopefully obvious. If you just need to do some cleanup on SIGINT, but
then exit immediately, the answer is "yes".

<p>If so, you have to tell the calling program about it by exiting
with the "I-exited-on-SIGINT" status.

<p>There is no other way of doing this than to kill yourself with a
SIGINT signal. Do it by resetting the SIGINT handler to SIG_DFL, then
send yourself the signal.

<PRE>
void sigint_handler(int sig)
{
	<do some cleanup>
	signal(SIGINT, SIG_DFL);
	kill(getpid(), SIGINT);
}
</PRE>

Notes:

<MENU>

<LI>You cannot "fake" the proper exit status by an exit(3) with a
special numeric value. People often assume this since the manuals for
shells often list some return value for exactly this. But this is just
a convention for your shell script. It does not work from one UNIX API
program to another. 

<P>All that happens is that the shell sets the "$?" variable to a
special numeric value for the convenience of your script, because your
script does not have access to the lower-lever UNIX status evaluation
functions. This is just an agreement between your script and the
executing shell, it does not have any meaning in other contexts.

<P><LI>Do not use kill(0, SIGINT) without consulting the manul for
your OS implementation. I.e. on BSD, this would not send the signal to
the current process, but to all processes in the group.

<P><LI>POSIX 1003.1 allows all these calls to appear in signal
handlers, so it is portable.

</MENU>

<p>In a bourne shell script, you can catch signals using the
<code>trap</code> command. Here, the same as for C programs apply.  If
the intention of SIGINT is to end your program, you have to exit in a
way that the calling programs "sees" that you have been killed.  If
you don't catch SIGINT, this happend automatically, but of you catch
SIGINT, i.e. to do cleanup work, you have to end the program by
killing yourself, not by calling exit.

<p>Consider this example from FreeBSD's <code>mkdep</code>, which is a
bourne shell script.

<pre>
TMP=_mkdep$$
trap 'rm -f $TMP ; trap 2 ; kill -2 $$' 1 2 3 13 15
</pre>

Yes, you have to do it the hard way. It's even more annoying in shell
scripts than in C programs since you can't "pre-delete" temporary
files (which isn't really portable in C, though).

<P>All this applies to programs in all languages, not only C and
bourne shell. Every language implementation that lets you catch SIGINT
should also give you the option to reset the signal and kill yourself.

<P>It is always desireable to exit the right way, even if you don't
expect your usual callers to depend on it, some unusual one will come
along. This proper exit status will be needed for WCE and will not
hurt when the calling shell uses IUE or WUE.

<H3>How to be a proper shell</H3>

All this applies only for the script-executing case. Most shells will
also have interactive modes where things are different.

<MENU>

<LI>Do nothing special when SIGINT appears while you wait for a child.
You don't even have to remember that one happened.

<P><LI>Wait for child to exit, get the exit status. Do not truncate it
to type char.

<P><LI>Look at WIFSIGNALED(status) and WTERMSIG(status) to tell
whether the child says "I exited on SIGINT: in my opinion the user
wants the shellscript to be discontinued".

<P><LI>If the latter applies, discontinue the script.

<P><LI>Exit. But since a shellscript may in turn be called by a
shellscript, you need to make sure that you properly communicate the
discontinue intention to the calling program. As in any other program
(see above), do

<PRE>
	signal(SIGINT, SIG_DFL);
	kill(getpid(), SIGINT);
</PRE>

</MENU>

<H3>Other remarks</H3>

Although this web page talks about SIGINT only, almost the same issues
apply to SIGQUIT, including proper exiting by killing yourself after
catching the signal and proper reaction on the WIFSIGNALED(status)
value. One notable difference for SIGQUIT is that you have to make
sure that not the whole call tree dumps core.

<H3>What to fight</H3>

Make sure all programs <em>really</em> kill themselves if they react
to SIGINT or SIGQUIT and intend to abort their operation as a result
of this signal. Programs that don't use SIGINT/SIGQUIT as a
termination trigger - but as part of normal operation - don't kill
themselves, but do a normal exit instead.

<p>Make sure people understand why you can't fake an exit-on-signal by
doing exit(...) using any numerical status.

<p>Make sure you use a shell that behaves right. Especially if you
develop programs, since it will help seeing problems.

<H3>Concrete examples how to fix programs:</H3>
<ul>

<li>The fix for FreeBSD's
<A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/time/time.c.diff?r1=1.10&r2=1.11">time(1)</A>. This fix is the best example, it's quite short and clear and
it fixes a case where someone tried to fake signal exit status by a
numerical value. And the complete program is small.

<p><li>Fix for FreeBSD's
<A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/truss/main.c.diff?r1=1.9&r2=1.10">truss(1)</A>.

<p><li>The fix for FreeBSD's
<A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/mkdep/mkdep.gcc.sh.diff?r1=1.8.2.1&r2=1.8.2.2">mkdep(1)</A>, a shell script.


<p><li>Fix for FreeBSD's make(1), <A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/make/job.c.diff?r1=1.9&r2=1.10">part 1</A>,
<A HREF="http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/make/compat.c.diff?r1=1.10&r2=1.11">part 2</A>.

</ul>

<H3>Testsuite for shells</H3>

I have a collection of shellscripts that test shells for the
behavior. See my <A HREF="download/">download dir</A> to get the newest
"sh-interrupt" files, either as a tarfile or as individual file for
online browsing. This isn't really documented, besides from the
comments the scripts echo.

<H3>Appendix 1 - table of implementation choices</H3>

<table border cellpadding=2>

<tr valign=top>
<th>Method sign</th>
<th>Does what?</th>
<th>Example shells that implement it:</th>
<th>What happens when a shellscript called emacs, the user used
<code>C-g</code> and the script has additional commands in it?</th>
<th>What happens when a shellscript called emacs, the user did not use
<code>C-c</code> and the script has additional commands in it?</th>
<th>What happens if a non-interactive child catches SIGINT?</th>
<th>To behave properly, childs must do what?</th>
</tr>

<tr valign=top align=left>
<td>IUE</td>
<td>The shell executing a script exits immediately if it receives
SIGINT.</td> 
<td>4.4BSD ash (ash), NetBSD, FreeBSD prior to 3.0/22.8</td>
<td>The editor session is lost and subsequent commands are not
executed.</td>
<td>The editor continues as normal and the subsequent commands are
executed. </td>
<td>The scripts ends immediately, returning to the caller even before
the current foreground child of the shell exits. </td>
<td>It doesn't matter what the child does or how it exits, even if the
child continues to operate, the shell returns. </td>
</tr>

<tr valign=top align=left>
<td>WUE</td>
<td>If the shell executing a script received SIGINT while a foreground
process was running, it will exit after that child's exit.</td>
<td>pdksh (OpenBSD /bin/sh)</td>
<td>The editor continues as normal, but subsequent commands from the
script are not executed.</td>
<td>The editor continues as normal and subsequent commands are
executed. </td>
<td>The scripts returns to its caller after the current foreground
child exits, no matter how the child exited. </td>
<td>It doesn't matter how the child exits (signal status or not), but
if it doesn't return at all, the shell will not return. In no case
will further commands from the script be executed. </td>
</tr>

<tr valign=top align=left>
<td>WCE</td>
<td>The shell exits if a child signaled that it was killed on a
signal (either it had the default handler for SIGINT or it killed
itself).  </td>
<td>bash (Linux /bin/sh), most commercial /bin/sh, FreeBSD /bin/sh
from 3.0/2.2.8.</td> 
<td>The editor continues as normal and subsequent commands are
executed. </td>
<td>The editor continues as normal and subsequent commands are
executed. </td>
<td>The scripts returns to its caller after the current foreground
child exits, but only if the child exited with signal status. If
the child did a normal exit (even if it received SIGINT, but catches
it), the script will continue. </td>
<td>The child must be implemented right, or the user will not be able
to break shell scripts reliably.</td> 
</tr>

</table>

<P><img src=linie.png width="100%" alt=" ">
<BR>&copy;2005 Martin Cracauer &lt;cracauer @ cons.org&gt;
<A HREF="http://www.cons.org/cracauer/">http://www.cons.org/cracauer/</A>
<BR>Last changed: $Date: 2005/02/11 21:44:43 $
</BODY></HTML>
