在bash中是否有可能攔截SIGINT,執行某些操作,然後忽略它(保持bash運行)。在bash中捕獲SIGINT,處理AND ignore
我知道,我可以忽略SIGINT與
trap '' SIGINT
而且我還可以做一些對SIGINT與
trap handler SIGINT
但handler
執行後仍然會停止腳本。例如。
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
當我按ctrl + c時,SIGINT到節目將被髮送,但bash將跳過wait
BEFORE程序正常關閉,並在其信號處理程序創建它的輸出。
使用@suspectus答案我可以改變wait $PID
到:
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
這實際上對我的作品只是我不是100%肯定,如果這是「乾淨」或「骯髒的解決辦法」。
爲什麼要多次打印? – cnicutar
@cnicutar:如果我按ctrl + c多次(我不能以當前的形式,因爲它在第一個之後停止) – Zulan
我改變了我的示例以更接近實際用例。 – Zulan