Subject: Re: bin/21658: interrupting (^C) /etc/rc.d/fsck doesn't stop auto boot
To: Todd Vierling <tv@pobox.com>
From: Luke Mewburn <lukem@netbsd.org>
List: netbsd-bugs
Date: 05/28/2003 21:36:42
On Tue, May 27, 2003 at 09:52:40AM -0400, Todd Vierling wrote:
| On Mon, 26 May 2003, ITOH Yasufumi wrote:
|
| : The forked sh and /sbin/fsck doesn't handle/block/ignore SIGINT,
| : and if ^C is pressed,
| :
| : sh /etc/rc (handle ^C) - forked sh - /sbin/fsck - /sbin/fsck_ffs (handle ^C)
| : | | | |
| : v v v v
| : handle ^C and ignore die die handle ^C and exit 12
|
| What may also be missing here is a hook in rc.subr:run_rc_script() to exit
| if the forked sh dies (test $? -ne 0). Right now, the forked sh's exit code
| is ignored, hence stop_boot() in /etc/rc.d/fsck doesn't do a thing to the
| parent /etc/rc shell. (The "kill" in /etc/rc.d/fsck is ineffective; it
| kills the /etc/rc.d/fsck subshell but *not* its parent.)
Weird; I'm sure I tested the stop_boot() stuff a fair bit, both in
"standard" config and with rc_fast_and_loose=YES. (Don't forget that
it won't work from single->multi user boots, only direct-to-multiuser
boots).
That said, it wouldn't be that hard to put in some code to test this
theory.
| lukem, do you think this is useful? I don't think that this will cause rc
| to abort if any random command invoked by a rc.d script fails (since by
| default, commands called by rc.d scripts also have their exitcodes ignored).
| This could be used to cause rc to abort if a rc.d script explicitly exits
| with a nonzero return code.
Could be a good idea; I'll take a look. (If you get a chance to test
& prove your theory before I commit any fixes, feel free to let me
know, preferably with a patch containing a working fix ;-)
Thanks,
Luke.