zsh-workers
 help / color / mirror / code / Atom feed
* Re: trap problem
  1999-03-05 11:32 trap problem Thomas Ziehmer
@ 1999-03-05 11:24 ` Peter Stephenson
  0 siblings, 0 replies; 6+ messages in thread
From: Peter Stephenson @ 1999-03-05 11:24 UTC (permalink / raw)
  To: Thomas Ziehmer, Zsh hackers list

Thomas Ziehmer wrote:
> Hallo, 
> with zsh 3.1.5 (the only tested version) on SGI and HP, but not on Linux, AIX
>  
> and Solaris (there it works correct), the following script produces a wrong
> output:
>
> [script omitted]
>
> The output of the second ps-command is not shown.
> Why?

Yes, I get this too on IRIX 6.2.  However, changing the arguments to the
second ps (adding e.g -u $USER or -e) does produce output.  So I think the
problem is that ps is getting confused somehow by the process group, and
simply not finding any processes to report.  Whether this is a bug due to
zsh setting up the process wrong, or simply ps's own confusion, is rather
hard to tell.

-- 
Peter Stephenson <pws@ibmth.df.unipi.it>       Tel: +39 050 844536
WWW:  http://www.ifh.de/~pws/
Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy


^ permalink raw reply	[flat|nested] 6+ messages in thread

* trap problem
@ 1999-03-05 11:32 Thomas Ziehmer
  1999-03-05 11:24 ` Peter Stephenson
  0 siblings, 1 reply; 6+ messages in thread
From: Thomas Ziehmer @ 1999-03-05 11:32 UTC (permalink / raw)
  To: zsh-workers

Hallo, 
with zsh 3.1.5 (the only tested version) on SGI and HP, but not on Linux, AIX 
and Solaris (there it works correct), the following script produces a wrong
output:

#!/usr/local/bin/zsh

function foo { \
echo step 1
ps
echo step 2
{ echo abcdef ; ps ; } | cat -
echo step 3
}

trap " foo ; exit " INT QUIT TERM HUP

{ time sleep 30 </dev/null ; } 2>/dev/null


ziehmer@o2000 [ziehmer]> t < t
^C
step 1
PID TTY     TIME CMD
21263 ttyq27  0:00 zsh-3.1.5 
23753 ttyq27  0:00 ps 
24969 ttyq27  0:00 t 
step 2
abcdef
step 3

The output of the second ps-command is not shown.
Why?

Regards
Thomas Ziehmer


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: trap problem.
  2001-03-29  5:58 ` Bart Schaefer
  2001-03-30  7:57   ` Tanaka Akira
@ 2001-03-30  9:36   ` Peter Stephenson
  1 sibling, 0 replies; 6+ messages in thread
From: Peter Stephenson @ 2001-03-30  9:36 UTC (permalink / raw)
  To: Zsh hackers list

> Perhaps zsh's tests for whether the last command can be `exec'd should
> include testing whether there are any user-defined traps in effect?

Hope this will work.  I think I've found everywhere the `signal trapped'
bit of elements of the sigtrapped array can change.  I'm sure the person
who wrote the trap-saving code has... errr... his fingers crossed.

Index: Src/exec.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/exec.c,v
retrieving revision 1.25
diff -u -r1.25 exec.c
--- Src/exec.c	2001/03/22 12:13:16	1.25
+++ Src/exec.c	2001/03/30 09:28:18
@@ -1954,7 +1954,7 @@
      *    be needed after the current command.  This is typically the case    *
      *    when when the command is the last stage in a subshell, or is the    *
      *    last command after the option `-c'.                                 *
-     * 2) We are not trapping EXIT or ZERR.                                   *
+     * 2) We don't have any traps set.                                        *
      * 3) We don't have any files to delete.                                  *
      *                                                                        *
      * The condition above for a `fake exec' will also work for a current     *
@@ -1966,8 +1966,7 @@
     if ((how & Z_ASYNC) ||
 	(!do_exec &&
 	 (((is_builtin || is_shfunc) && output) ||
-	  (!is_cursh && (last1 != 1 || sigtrapped[SIGZERR] ||
-			 sigtrapped[SIGEXIT] || havefiles()))))) {
+	  (!is_cursh && (last1 != 1 || nsigtrapped || havefiles()))))) {
 
 	pid_t pid;
 	int synch[2];
Index: Src/signals.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/signals.c,v
retrieving revision 1.15
diff -u -r1.15 signals.c
--- Src/signals.c	2001/01/25 09:20:13	1.15
+++ Src/signals.c	2001/03/30 09:28:18
@@ -41,6 +41,11 @@
 /**/
 mod_export Eprog sigfuncs[VSIGCOUNT];
 
+/* Total count of trapped signals */
+
+/**/
+mod_export int nsigtrapped;
+
 /* Variables used by signal queueing */
 
 /**/
@@ -716,6 +721,7 @@
             sig != SIGCHLD)
             signal_ignore(sig);
     } else {
+	nsigtrapped++;
         sigtrapped[sig] = ZSIG_TRAPPED;
         if (sig && sig <= SIGCOUNT &&
 #ifdef SIGWINCH
@@ -773,6 +779,8 @@
 	unqueue_signals();
         return NULL;
     }
+    if (sigtrapped[sig] & ZSIG_TRAPPED)
+	nsigtrapped--;
     sigtrapped[sig] = 0;
     if (sig == SIGINT && interact) {
 	/* PWS 1995/05/16:  added test for interactive, also noholdintr() *
@@ -860,6 +868,8 @@
 	    exitfn = sigfuncs[SIGEXIT];
 	}
 	sigfuncs[SIGEXIT] = NULL;
+	if (sigtrapped[SIGEXIT] & ZSIG_TRAPPED)
+	    nsigtrapped--;
 	sigtrapped[SIGEXIT] = 0;
     }
 
@@ -878,6 +888,12 @@
 		dontsavetrap++;
 		settrap(sig, prog);
 		dontsavetrap--;
+		/*
+		 * counting of nsigtrapped should presumably be handled
+		 * in settrap...
+		 */
+		DPUTS((sigtrapped[sig] ^ st->flags) & ZSIG_TRAPPED,
+		      "BUG: settrap didn't restore correct ZSIG_TRAPPED");
 		if ((sigtrapped[sig] = st->flags) & ZSIG_FUNC)
 		    shfunctab->addnode(shfunctab, ((Shfunc)st->list)->nam,
 				       (Shfunc) st->list);

-- 
Peter Stephenson <pws@csr.com>                  Software Engineer
CSR Ltd., Unit 300, Science Park, Milton Road,
Cambridge, CB4 0XL, UK                          Tel: +44 (0)1223 392070


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: trap problem.
  2001-03-29  5:58 ` Bart Schaefer
@ 2001-03-30  7:57   ` Tanaka Akira
  2001-03-30  9:36   ` Peter Stephenson
  1 sibling, 0 replies; 6+ messages in thread
From: Tanaka Akira @ 2001-03-30  7:57 UTC (permalink / raw)
  To: zsh-workers

In article <1010329055823.ZM17574@candle.brasslantern.com>,
  "Bart Schaefer" <schaefer@candle.brasslantern.com> writes:

> That's because zsh has been extremely clever and has `exec'd "sleep 60",
> so there's no zsh process around any more to execute the trap.

I see.

% Src/zsh -fc 'trap "echo INT" INT; sleep 60; :'

works as I expected.  Thanks.

> Perhaps zsh's tests for whether the last command can be `exec'd should
> include testing whether there are any user-defined traps in effect?

I agree.
-- 
Tanaka Akira


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: trap problem.
  2001-03-29  3:39 Tanaka Akira
@ 2001-03-29  5:58 ` Bart Schaefer
  2001-03-30  7:57   ` Tanaka Akira
  2001-03-30  9:36   ` Peter Stephenson
  0 siblings, 2 replies; 6+ messages in thread
From: Bart Schaefer @ 2001-03-29  5:58 UTC (permalink / raw)
  To: Tanaka Akira, zsh-workers

On Mar 29, 12:39pm, Tanaka Akira wrote:
} Subject: trap problem.
}
} trap doesn't work as follows.
} 
} % Src/zsh --version
} zsh 4.0.1-pre-2 (i386-unknown-freebsd4.2)
} % Src/zsh -fc 'trap "echo INT" INT; sleep 60'
} ^C
} %
} 
} It should print `INT' but it doesn't.

That's because zsh has been extremely clever and has `exec'd "sleep 60",
so there's no zsh process around any more to execute the trap.

Try:	Src/zsh -fc 'trap "echo INT" INT; sleep 60; sleep 1'

and you'll see ...

Perhaps zsh's tests for whether the last command can be `exec'd should
include testing whether there are any user-defined traps in effect?

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


^ permalink raw reply	[flat|nested] 6+ messages in thread

* trap problem.
@ 2001-03-29  3:39 Tanaka Akira
  2001-03-29  5:58 ` Bart Schaefer
  0 siblings, 1 reply; 6+ messages in thread
From: Tanaka Akira @ 2001-03-29  3:39 UTC (permalink / raw)
  To: zsh-workers

trap doesn't work as follows.

% Src/zsh --version
zsh 4.0.1-pre-2 (i386-unknown-freebsd4.2)
% Src/zsh -fc 'trap "echo INT" INT; sleep 60'
^C
%

It should print `INT' but it doesn't.

bash, pdksh, ash and ksh93 works as follows.

% bash -fc 'trap "echo INT" INT; sleep 60'     
^CINT
zsh: exit 130   bash -fc 'trap "echo INT" INT; sleep 60'
% 

ksh93 exits with 2 instead of 130, though.
-- 
Tanaka Akira


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2001-03-30  9:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-03-05 11:32 trap problem Thomas Ziehmer
1999-03-05 11:24 ` Peter Stephenson
2001-03-29  3:39 Tanaka Akira
2001-03-29  5:58 ` Bart Schaefer
2001-03-30  7:57   ` Tanaka Akira
2001-03-30  9:36   ` Peter Stephenson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).