[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the
From: |
Stefano Lattarini |
Subject: |
Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself |
Date: |
Mon, 12 Sep 2011 20:17:28 +0200 |
User-agent: |
KMail/1.13.7 (Linux/2.6.30-2-686; KDE/4.6.5; i686; ; ) |
On Monday 12 September 2011, Paul Eggert wrote:
> On 09/12/11 09:19, Stefano Lattarini wrote:
>
> > This example might show the problem more clearly:
>
> Yes, thanks, that does clarify matters, and my guesses seem
> incorrect. It does seem that ksh's behavior (in your last
> example, anyway) violates POSIX
> <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_12>.
>
Thanks for the reference.
Now some updates: the "default" Korn Shell on Debian GNU/Linux (package
`ksh', version `93u-1') seems to exhibit the same issue:
$ ksh -c "perl -e 'kill 2, \$\$'; :"; echo $?
130
And if I'm not reading the strace output wrong, this is due to the fact
that the Debian korn shell is apparently killing itself (yikes!) with the
same signal that killed the child process:
$ strace ksh -c "perl -e 'kill 2, \$\$'; :"
...
getpid() = 15108
...
lstat64("/usr/bin/perl", {st_mode=S_IFREG|0755, st_size=1437872, ...}) = 0
rt_sigprocmask(SIG_BLOCK, [HUP INT QUIT PIPE], [], 8) = 0
vfork() = 15109
--- SIGCHLD (Child exited) @ 0 (0) ---
sigreturn() = ? (mask now [HUP INT QUIT PIPE])
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}],
WNOHANG|WSTOPPED|WCONTINUED) = 15109
waitpid(-1, 0xbfa0270c, WNOHANG|WSTOPPED|WCONTINUED) = -1 ECHILD (No child
processes)
rt_sigaction(SIGCHLD, {0x806e390, [], SA_INTERRUPT}, {0x806e390, [],
SA_INTERRUPT}, 8) = 0
rt_sigaction(SIGINT, {0x80603b0, [], SA_INTERRUPT}, {SIG_DFL, [], 0}, 8) = 0
ioctl(2, TIOCGPGRP, [15107]) = 0
rt_sigaction(SIGINT, {0x80603b0, [], SA_INTERRUPT}, {0x80603b0, [],
SA_INTERRUPT}, 8) = 0
getrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=RLIM_INFINITY}) = 0
setrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=RLIM_INFINITY}) = 0
rt_sigaction(SIGINT, {SIG_DFL, [], SA_INTERRUPT}, {0x80603b0, [],
SA_INTERRUPT}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [INT], NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [INT], NULL, 8) = 0
kill(15108, SIGINT) = 0
--- SIGINT (Interrupt) @ 0 (0) ---
+++ killed by SIGINT +++
The truss output on Solaris is less clear (for me at least, I'm not used
to it), and I'm not at all sure that the issue there is due to the same
dynamics; more digging needed.
Regards,
Stefano
- On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Paul Eggert, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Paul Eggert, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself,
Stefano Lattarini <=
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Paul Eggert, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Paul Eggert, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12
- Re: On solaris, a SIGINT sent to a child process of Korn Shell kills the shell itself, Stefano Lattarini, 2011/09/12