Hi,
With recent linux distributions (using NPTL), I noticed that dd can hang
waiting on a futex when being killed. The problem sould be reproduceable
with the following script :
-------$<-------$<-------$<-------$<-------$<-------$<-------$<--------
#!/bin/sh
echo 'When you only see "dd frozen" in a loop the problem is present'
while : ; do
dd if=/dev/zero of=/dev/null bs=1000 count=200 &> /dev/null
echo -n "."
done &
# Don't leave useless dd processes
CHILD=$!
trap "kill $CHILD; killall dd" EXIT
while : ; do
killall -INT dd &> /dev/null
usleep 10000
PIDOF_DD1=$(pidof dd)
usleep 10000
PIDOF_DD2=$(pidof dd)
if [ -n "$PIDOF_DD1" ] && [ "$PIDOF_DD1" = "$PIDOF_DD2" ]; then
echo "dd frozen"
else
echo -n "+"
fi
done
-------$<-------$<-------$<-------$<-------$<-------$<-------$<--------
I can reproduce it on Fedora Core [1-3] on x86, even with recent kernels
like 2.6.12-rc1-bk3,,but it goes away with LD_ASSUME_KERNEL=2.4. It
seems to exploit a race condition somewhere, so the problem may need
some time (or some load) before triggering.
Hopefully someone can reproduce and look into it.
Kind regards.
--
Guillaume