svn commit: r257399 - in head: bin/sh tools/regression/bin/sh/builtins

Jilles Tjoelker jilles at FreeBSD.org
Wed Oct 30 21:36:16 UTC 2013


Author: jilles
Date: Wed Oct 30 21:36:15 2013
New Revision: 257399
URL: http://svnweb.freebsd.org/changeset/base/257399

Log:
  sh: Allow trapping SIGINT/SIGQUIT after ignore because of '&'.
  
  If job control is not enabled, background jobs started with  ... &  ignore
  SIGINT and SIGQUIT so that they are not affected by such signals that are
  intended for the foreground job. However, this should not prevent
  reassigning a different action for these signals (as if the shell invocation
  inherited these signal actions from its parent).
  
  Austin group issue #751
  
  Example:
    { trap - INT; exec sleep 10; } & wait
  A Ctrl+C should terminate the sleep command.

Added:
  head/tools/regression/bin/sh/builtins/trap13.0   (contents, props changed)
  head/tools/regression/bin/sh/builtins/trap14.0   (contents, props changed)
Modified:
  head/bin/sh/trap.c

Modified: head/bin/sh/trap.c
==============================================================================
--- head/bin/sh/trap.c	Wed Oct 30 21:18:14 2013	(r257398)
+++ head/bin/sh/trap.c	Wed Oct 30 21:36:15 2013	(r257399)
@@ -362,10 +362,12 @@ void
 ignoresig(int signo)
 {
 
+	if (sigmode[signo] == 0)
+		setsignal(signo);
 	if (sigmode[signo] != S_IGN && sigmode[signo] != S_HARD_IGN) {
 		signal(signo, SIG_IGN);
+		sigmode[signo] = S_IGN;
 	}
-	sigmode[signo] = S_HARD_IGN;
 }
 
 

Added: head/tools/regression/bin/sh/builtins/trap13.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/trap13.0	Wed Oct 30 21:36:15 2013	(r257399)
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+{
+	trap 'exit 0' INT
+	${SH} -c 'kill -INT $PPID'
+	exit 3
+} &
+wait $!

Added: head/tools/regression/bin/sh/builtins/trap14.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/builtins/trap14.0	Wed Oct 30 21:36:15 2013	(r257399)
@@ -0,0 +1,10 @@
+# $FreeBSD$
+
+{
+	trap - INT
+	${SH} -c 'kill -INT $PPID' &
+	wait
+} &
+wait $!
+r=$?
+[ "$r" -gt 128 ] && [ "$(kill -l "$r")" = INT ]


More information about the svn-src-head mailing list