while true; do
# process substitution instead of usual pipeline to avoid waiting for all programs
handle_input_with_timeout < <( prog1 | prog2 | prog3 )
echo "Data stopped flowing. Trying again"
# perminate stuck programs in previous pipeline, then try again
sleep 5
done
中断される可能性があるprog1、prog2、およびprog3を削除し、再試行に必要なリソースを維持する方法は?
Bashだけで実行できますか、またはcgroupを使用する必要がありますか?
ベストアンサー1
これはプロセスグループを介して行うことができます(推奨)。ここ)そしてsetsid
新しいものを始めましょう:
while true; do
handle_input_with_timeout < <( setsid bash -c '
printf -- "-$$" > /tmp/saved_process_group.pid
prog1 | prog2 | prog3
')
echo "Data stopped flowing. Trying again"
kill -9 $(< /tmp/saved_process_group.pid )
sleep 5
done