A relação pai-filho é arruinada por todos os '&' envolvido.
A chamada do sistema wait(2)
, na qual o wait
incorporado é aparentemente baseado, só funcionará para um PID filho direto do processo que chama wait(2)
.
Quando você invoca sh myprogram &
, você executa sh
como filho do shell interativo.
Quando você invoca sh notify &
, esse sh
é filho do shell interativo.
Portanto, o segundo sh
não tem nenhum relacionamento pai direto com o primeiro sh
e wait
não funcionará.
Isso nem funcionará se você invocar sh myprogram &; sh notify;
, porque o comando wait
é invocado por um filho do shell interativo.
O que funciona para mim é: sh myprogram &; wait
O comando wait
faz com que o shell interativo (pai do sh
chamado explicitamente) permaneça até que sh
seja encerrado.