Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: zsh 4.3.10 terminates with SIGINT when one types Ctrl-G in emacs under Mac OS X
- X-seq: zsh-workers 27159
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: zsh 4.3.10 terminates with SIGINT when one types Ctrl-G in emacs under Mac OS X
- Date: Sat, 18 Jul 2009 11:16:15 -0700
- In-reply-to: <20090718101602.GA5392@xvii>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <schaefer@xxxxxxxxxxxxxxxx> <090712193623.ZM14823@xxxxxxxxxxxxxxxxxxxxxx> <200907131839.n6DIdO6Z003291@xxxxxxxxxxxxxxxxxxx> <20090716162419.GA26179@xxxxxxxxxxxxxxxxxxx> <090717222936.ZM8648@xxxxxxxxxxxxxxxxxxxxxx> <20090718101602.GA5392@xvii>
I'm going to send two replies to this part of the thread for different
subsets of Vincent's remarks, so that neither message gets too long.
This first one has a bunch of strace output in it. Jump towards the
end for the punchline.
On Jul 18, 12:16pm, Vincent Lefevre wrote:
} Subject: Re: zsh 4.3.10 terminates with SIGINT when one types Ctrl-G in em
}
} On 2009-07-17 22:29:36 -0700, Bart Schaefer wrote:
} > When running a shell script (not interactively), zsh does NO HANDLING
} > of SIGINT whatsoever. It's implementing IUE, not WUE. Or to be more
} > precise, it's implementing the default behavior on SIGINT, which is
} > usually to exit.
}
} Yes, this is what I can see with zsh 4.3.10 (but zsh 4.2.3 implemented
} WUE).
Let's look at that a bit more closely.
Here's 4.2.6 (slight difference in OS version may account for the
missing RT_1 in the sigprocmask):
pipe([3, 4]) = 0
gettimeofday({1247938636, 336849}, {480, 0}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0xb75e4868) = 27231
close(4) = 0
read(3, "", 1) = 0
close(3) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0
rt_sigsuspend(~[HUP CHLD RTMIN] <unfinished ...>
--- SIGCHLD (Child exited) @ 0 (0) ---
<... rt_sigsuspend resumed> ) = -1 EINTR (Interrupted system call)
rt_sigprocmask(SIG_BLOCK, ~[RTMIN], ~[HUP KILL STOP RTMIN], 8) = 0
rt_sigprocmask(SIG_SETMASK, ~[HUP KILL STOP RTMIN], ~[KILL STOP RTMIN], 8) = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WUNTRACED,
{ru_utime={0, 0}, ru_stime={0, 0}, ...}) = 27231
gettimeofday({1247938666, 347837}, {480, 0}) = 0
wait4(-1, 0xbfffd14c, WNOHANG|WUNTRACED, 0xbfffd154) = -1 ECHILD (No child
processes)
sigreturn() = ? (mask now [CHLD])
--- SIGINT (Interrupt) @ 0 (0) ---
Now here's 4.2.6 with the TRAPS_ASYNC option set:
pipe([3, 4]) = 0
gettimeofday({1247939573, 896574}, {480, 0}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0xb75e0868) = 27252
close(4) = 0
read(3, "", 1) = 0
close(3) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0
rt_sigsuspend([] <unfinished ...>
--- SIGINT (Interrupt) @ 0 (0) ---
And finally 4.3.10-dev-1, doesn't matter whether TRAPS_ASYNC is set:
pipe([3, 4]) = 0
gettimeofday({1247938336, 854096}, {420, 0}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD,
child_tidptr=0xb7f6c708) = 10263
close(4) = 0
read(3, "", 1) = 0
close(3) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0
rt_sigsuspend([] <unfinished ...>
--- SIGINT (Interrupt) @ 0 (0) ---
This was changed in this patch ...
* 23067: Doc/Zsh/builtins.yo, Src/jobs.c, Src/signals.c:
queue traps but handle signals when waiting for jobs or processes,
unless TRAPSASYNC is set or the wait builtin is in use, so as
to handle untrapped signals in a timely fashion; document that
negative or zero process IDs after kill may be handled specially
by the OS.
... when the signal_suspend_setup() function was removed from signals.c
because of a problem with interrupting "wait". This began in 23053 as
a MacOS bug report and relevant dicussion continues in 23055 and 23061.
Apparently you darn Mac users can't make up your mind. :-)
Messages sorted by:
Reverse Date,
Date,
Thread,
Author