Linux

如何將中斷信號限制在子程序中?

  • September 4, 2018

我有一堆日誌文件,我想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

trap ":" SIGINT

在循環之前。這使得 shell 忽略該信號。但只是在它執行一個虛擬命令的意義上,而不是在信號處理程序意義上的“忽略”。

因為 shell 程序不會阻塞這個信號(從核心的角度來看),所以它會通過它的子程序(就像tail這個例子中一樣)。

引用自:https://unix.stackexchange.com/questions/430063