В Program_B вы можете close()
stdin при обнаружении условия закрытия.Это приведет к тому, что Program_A получит ошибку при write()
и, возможно, прекратит работу.
Теперь Program_A может игнорировать эти ошибки (я не знаю, ваше ли это приложение или предварительно скомпилированный инструмент) ивот идет забавная часть.В Program_B вы можете проверить, откуда взялся ваш стандартный:
my_input=`readlink /proc/$$/fd/0`
, затем, если это что-то вроде "pipe: [134414]", найти любой другой процесс, чей стандартный вывод равен
case "$my_input" in
pipe:*)
for p in /proc/[0-9]*
do
if [ "$my_input" = "`readlink $p/fd/1`" ]
then
bad_guy=`sed -e 's:.*/::' <<< "$p"`
echo "Would you please finish, Mr. $bad_guy ?!"
kill $bad_guy
break
fi
done
;;
*)
echo "We're good";;
esac