(問題修訂,現在我更多地瞭解所發生的情況):爲什麼我的bash腳本需要這麼長時間才能在後臺運行時響應kill?
我已經在後臺運行的腳本,定期做一些工作,然後睡30秒:
echo "background script PID: $$"
trap 'echo "Exiting..."' INT EXIT
while true; do
# check for stuff to do, do it
sleep 30
done &
如果我試圖通過kill
或kill INT
殺死此腳本,則需要30秒才能響應該信號。
下面我會回答這個問題,因爲我找到了一個很好的解釋網上。
(我原來的,令人尷尬的聯合國研究問題)
這個問題是一個bash腳本,其中包括以下陷阱:
trap 'echo "Exiting...">&2; kill $childPID 2>/dev/null; exit 0' \ SIGALRM SIGHUP SIGINT SIGKILL SIGPIPE SIGPROF SIGTERM \ SIGUSR1 SIGUSR2 SIGVTALRM SIGSTKFLT
如果我在前臺運行腳本,並擊中 CTRL - C,它立即得到信號並退出 (在一秒內)。
如果我在後臺(
&
)運行相同的腳本,並且經由kill
或kill -INT
殺死它,它獲取信號之前需要30秒。這是爲什麼,我該如何解決?
你可以顯示腳本嗎? – tristan
好吧,我現在可以看到,還有一些額外的因素,因爲我沒有得到一個微不足道的例子相同的行爲。我會花一些時間將其縮小到再現行爲的最小示例,並用更多細節更新我的問題。 – RashaMatt