From owner-cvs-all Thu Feb 5 11:41:50 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id LAA14885 for cvs-all-outgoing; Thu, 5 Feb 1998 11:41:50 -0800 (PST) (envelope-from owner-cvs-all@FreeBSD.ORG) Received: from cons.org (knight.cons.org [194.233.237.86]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id LAA14878 for ; Thu, 5 Feb 1998 11:41:44 -0800 (PST) (envelope-from cracauer@cons.org) Received: (from cracauer@localhost) by cons.org (8.8.5/8.7.3) id UAA16267; Thu, 5 Feb 1998 20:43:20 +0100 (CET) Message-ID: <19980205204320.31887@cons.org> Date: Thu, 5 Feb 1998 20:43:20 +0100 From: Martin Cracauer To: cvs-commiters@FreeBSD.ORG Cc: cracauer@cons.org Subject: Re: Please review fix for /bin/sh SIGQUIT/SIGINT problem References: <19980205202824.51394@cons.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.81 In-Reply-To: <19980205202824.51394@cons.org>; from Martin Cracauer on Thu, Feb 05, 1998 at 08:28:24PM +0100 Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk X-To-Unsubscribe: mail to majordomo@FreeBSD.org "unsubscribe cvs-all" I found another case that needs to be taken into account. The fix appended also works right for #/bin/sh somebackgroundjobs & while `true` ; do foo=1 ; done Martin diff -r -c sh.original/jobs.c sh/jobs.c *** sh.original/jobs.c Mon Mar 10 10:53:43 1997 --- sh/jobs.c Thu Feb 5 20:37:11 1998 *************** *** 553,558 **** --- 553,562 ---- TRACE(("forkshell(%%%d, 0x%lx, %d) called\n", jp - jobtab, (long)n, mode)); INTOFF; + if (mode == FORK_FG) { + signal(SIGQUIT,SIG_IGN); + signal(SIGINT,SIG_IGN); + } pid = fork(); if (pid == -1) { TRACE(("Fork failed, errno=%d\n", errno)); *************** *** 565,570 **** --- 569,576 ---- int i; TRACE(("Child shell %d\n", getpid())); + signal(SIGQUIT,SIG_DFL); + signal(SIGINT,SIG_DFL); wasroot = rootshell; rootshell = 0; for (i = njobs, p = jobtab ; --i >= 0 ; p++) *************** *** 674,679 **** --- 680,688 ---- while (jp->state == 0) { dowait(1, jp); } + signal(SIGQUIT,SIG_DFL); + signal(SIGINT,SIG_DFL); + #if JOBS if (jp->jobctl) { if (ioctl(2, TIOCSPGRP, (char *)&mypgrp) < 0) -- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Martin Cracauer http://www.cons.org/cracauer cracauer@wavehh.hanse.de (batched, preferred for large mails) Tel.: (daytime) +4940 41478712 Fax.: (daytime) +4940 41478715 Tel.: (private) +4940 5221829 Fax.: (private) +4940 5228536 Paper: (private) Waldstrasse 200, 22846 Norderstedt, Germany