パイプライン全体にSIGKILLを送信する方法は?

パイプライン全体にSIGKILLを送信する方法は?
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

おすすめ記事