如何将中断信号限制为仅限子进程?

如何将中断信号限制为仅限子进程?

我有一堆日志文件,我想tail -f在循环中对它们执行 a 操作,这样当我按 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

在循环之前。这使得 shell 忽略该信号。但只是在它执行虚拟命令的意义上,而不是信号处理程序意义上的“忽略”。

因为 shell 进程不会阻止该信号(从内核角度来看),所以它会到达其子进程(如tail本例所示)。

相关内容