Zsh
主 shell 退出後 >(process) 收到哪個信號?
這是一個 Zshell 問題,儘管 Bash,如果它具有 >(command) 語法(即這種類型的程序替換),也可以提示解決方案。這個非常基本的程式碼解釋了所有內容:
% fun() { setopt localtraps trap "echo waiting >> /tmp/out; sleep 2; echo bye >> /tmp/out; exit 1;" EXIT echo "My PID: $sysparams[pid]" # needs zsh/system module repeat 1000; do read -r -t 1 line done } % exec {MYFD}> >(fun) % exit
以上工作——fun() 將收到陷阱,兩條消息將出現在 /tmp/out 中,“exit 1”將關閉程序。
我的問題:可以用一些實際信號代替“退出”嗎?我已經嘗試過 PIPE、HUP、INT、TERM,但它們都不起作用。
您的程式碼並不能解釋全部。我不知道你想做什麼。但是,我可以回答你標題中的問題:
>(…)
當主 shell 退出時,程序沒有收到信號。它退出是因為它到達腳本的末尾,此時它執行EXIT
陷阱,直到它執行exit
內置。如果您認為腳本被提前終止是因為您認為每個
read -t 1
呼叫會花費一秒鐘:不,它們不會,它們會在父級退出後立即返回。當父級退出時,read
子shell 中的呼叫試圖從一個封閉的管道中讀取,並且底層read
系統呼叫立即返回,沒有可用的數據。