adam@misoft.UUCP (08/14/87)
Bug: bourne shell returns with a funny status when a child is interrupted.
Repeat-by: compile and run the following programs:
--------------------------put in waiter.c----cc waiter.c -o waiter---------
main(argc, argv, environ)
int argc;
char *argv[], *environ[];
{
printf("%d\n", system("waittest"));
}
---------------------------------------------------------------------------
------------------------put in waittest.c----cc waittest.c -o waittest----
#include <signal.h>
piss_about() {
signal(SIGINT, SIG_IGN);
puts("Hello");
signal(SIGINT, piss_about);
}
main(argc, argv, environ)
int argc;
char *argv[], *environ[];
{
/* Interrupt handler.*/
signal(SIGINT, piss_about);
/* I interrupt myself to make the point.*/
kill(getpid(), SIGINT);
/* Give the user a chance to interrupt me.*/
getchar();
/* Exit cleanly!!!!!*/
exit(0);
}
--------------------------------------------------------------------------
To run:
a) Normal exit - type waiter <return> <return>
b) Funny exit - type waiter <return>
Wait for the "Hello"
Type ^C (or whatever your interrupt char is)
Type <return> - note the funny exit status.
These programs work o.k. on system 5. I can only conjecture that the shell
exec'ed by the call to 'system' is getting muddled when a keyboard interrupt
occurs. This is especially irritating when one interrupts a program in
order to turn on tracing, for example. If the program is part of a 'make'
facility, it appears that the program has failed.
-Adam.
/* If at first it don't compile, kludge, kludge again.*/ {NUKE THE GAY WHALE!}