Date: Fri, 5 Sep 2003 14:14:36 -0400 From: The Anarcat <anarcat@anarcat.ath.cx> To: FreeBSD Questions <freebsd-questions@FreeBSD.ORG> Cc: anarcat@anarcat.ath.cx Subject: bug in sh or misinterpretation? Message-ID: <20030905181436.GF514@inso.ath.cx>
next in thread | raw e-mail | index | archive | help
--N8ia4yKhAKKETby7 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable [please CC, I don't follow -questions] Hello! I've been struggling with an odd quirk in sh(1). Here is my sample code: --- 8< cut here 8< --- cleanup () { echo "cleaning up $pid" kill $pid } ( echo "in subshell" tail -f /etc/motd & pid=3D$! trap cleanup 1 2 15 wait $pid || echo "command failed" ) & wait --- 8< cut here 8< --- The idea is to be able *in the subshell* to cleanup a backgrounded command. The result is unexpected: anarcat@shall[~/src/local/bin/worldtools]% sh test_trap.sh=20 in subshell FreeBSD 4.8-STABLE (SHALL) #0: Wed Aug 13 16:46:04 EDT 2003 Welcome to Shall, multi-purpose file/mail/web/ftp server. ^C anarcat@shall[~/src/local/bin/worldtools]% ps PID TT STAT TIME COMMAND 14162 p1 Ss 0:03,95 -zsh (zsh) 16918 p1 S 0:00,00 sh test_trap.sh 16919 p1 S 0:00,00 sh test_trap.sh 16920 p1 S 0:00,01 tail -f /etc/motd 16922 p1 R+ 0:00,00 ps i.e. the subshell doesn't call the trap!! I've searched long and large manuals, I even tried debugging (i'm about to build sh with debugging symbols now): the subshell *really* receives the signal, it just ignores it. The sh manpage says that: When the shell forks off a subshell, it resets trapped (but not ignored) signals to the default action. The trap command has = no effect on signals that were ignored on entry to the shell. Well, it looks like calling trap in the subshell doesn't work. For reference, in bash and zsh behave correctly: anarcat@shall[~/src/local/bin/worldtools]% zsh test_trap.sh=20 in subshell FreeBSD 4.8-STABLE (SHALL) #0: Wed Aug 13 16:46:04 EDT 2003 Welcome to Shall, multi-purpose file/mail/web/ftp server. ^Ccleaning up 16947 anarcat@shall[~/src/local/bin/worldtools]% command failed Is it me? Or do I head for GNATS? :) A. --=20 There has been only one Christian. They caught him and crucified him -- early. - Mark Twain --N8ia4yKhAKKETby7 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQE/WNKMttcWHAnWiGcRAm7ZAJ4nBVa6JI5twAD52HX4DcdrynPumQCgk07W 3wkdSpZ3iVYnAsjH6aROp04= =1yzv -----END PGP SIGNATURE----- --N8ia4yKhAKKETby7--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030905181436.GF514>