割り込み信号をサブプロセスに限定する方法は?

割り込み信号をサブプロセスに限定する方法は?

複数のログファイルがあり、tail -fループ内でそのファイルを操作してCtrl-Cを押すと、現在のファイルが終了してtail -f次のログファイルに移動しようとします。

for log in *.log; do
    printf '%s\n' "Tailing log '$log'; press Ctrl-C to skip to the next"
    tail -f "$log"
done

問題は、Ctrl-Cを押すとループ自体が終了することです。tailこの場合、割り込み信号を子プロセスに限定するにはどうすればよいですか?

ベストアンサー1

置く

trap ":" SIGINT

屋根の前に。これにより、シェルはシグナルを無視します。しかし、信号ハンドラの意味で「無視」するのではなく、ダミー命令を実行するという意味でのみ可能です。

シェルプロセスはカーネルの観点から信号をブロックしないため、tailこの例のようにサブプロセスに到達します。

おすすめ記事