Hello,
I had troubles running a simple bash script where a child wrote to a named pipe
before dying, and the parent opened and read the pipe.
On a computer, my script hangs always. Also under 'strace'. Not under 'strace
-f'. Thinking of some race, I wrote a small script that hangs in the linuxes I
could try (3.2.11 now):
----------
#!/var/run/current-system/sw/bin/bash
PIPE=/tmp/pipe
rm -f $PIPE
mkfifo $PIPE
function spawn {
echo DONE> $PIPE
}
spawn sleep 1&
while true; do
echo reading
while read LINE< $PIPE; do
echo $LINE
spawn&
done
done
-------------
bash uses SA_RESTART on SIGCHLD handler, and nevertheless the script halts at
printing some amount of 'DONE'. Strace shows it's inside the open() call, while the open
call has been interrupted by SIGCHLD. One of the computers I have hangs at the *first* DONE always, and that's why it's annoying to me.
Can anyone reproduce this?