Ocorre pelo menos no GNU bash versão 4.3.42 x86_64 && GNU bash versão 4.3.11 x86_64
Eu uso em sleep & wait $!vez de um simples sleeppara obter uma interrupção sleeppor um sinal (como SIGUSR1 ). Mas parece que o waitbash-builtin se comporta de uma maneira estranha quando você executa o seguinte.
Terminal 1:
cat <(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)&
Terminal 2:
kill -10 /the pid of the subshell, printed by the previous command/
Terminal 1:
^C (ctrl + C)
Então, recebo o subshell que queima uma CPU a 100%.
Terminal 1:
pkill -P $(pgrep -P $$)
Você tem alguma idéia de por que esse comportamento ocorre?
NB : nenhum problema ocorre quando o cat <(/subshell/)não está em segundo plano.
Outra maneira de experimentar esse comportamento
Terminal 1:
(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)&
Terminal 2:
kill -10 /the pid of the subshell, printed by the previous command/
Terminal 1:
fg
^C (ctrl + C)
Então, pegue uma concha congelada.
Uma terceira maneira de experimentar esse comportamento
Terminal 1:
(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)
Terminal 2:
kill -10 /the pid of the subshell, printed by the previous command/
Terminal 1:
^C (ctrl + C)
Então, pegue uma concha congelada.
bash4.4, talvez isso aqui possa ser afetado.
waitque se parece muito com isso. Fui atingido por isso em um loop que gerou subprocessos para sempre. No entanto, testei seu cenário na 4.4.20 e ainda era um problema. Curiosamente, quando anexei um depurador em uma versão que construí, pude ver que ele estava circulando, mas também teve o efeito de sair dele, e o loop começaria a emitir 'test' novamente. Em outras palavras: anexar o depurador fez com que ele parasse de girar.