Linux
如何將中斷信號限制在子程序中?
我有一堆日誌文件,我想
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
這個例子中一樣)。