0
我有一個簡單的bash腳本來控制Amazon AWS的上傳和下載。上傳和下載工作正常。但有時候,我的網絡連接很差,我想取消AWS活動。但是,當我點擊取消按鈕(zenity進度對話框)時,AWS進程繼續並繼續(幾分鐘)...我可以殺死AWS進程的唯一方法是前往終端並執行「killall -9 aws」bash zenity對話框在取消時不會終止進程
while [ "$repeat" -eq 0 ]; do
... setup code ...
aws s3 sync "$dir1" "$dir2" --region us-east-1 --output text --sse --delete | tr '\r' '\n' > "$last_log_file"
... error code analysis
done | zenity --progress --title="$title_text" --text="$msg" --pulsate --auto-close
killall -9 aws # <=== When I depress zenity 'cancel' ... this code never executes !!! (this code was added for debug)
我明白,當我壓低取消PB應該殺死進程。有沒有辦法可以強制這種事情發生?
問題是''aws'和'while'循環中的所有其他東西都不知道'zenity'是否關閉,直到他們嘗試寫入stdout。只要他們這樣做,他們會得到一個SIGPIPE,並可能退出 –
嗯..正如你在我的代碼中看到的,我正在捕獲日誌文件中的AWS輸出。每傳輸一個文件(數百個文件),每隔一秒就會定期更新數據。所以我希望AWS在收到SIGPIPE後不到一秒鐘就關閉。我錯過了什麼嗎? – daniel
,因爲你正在寫入文件而不是標準輸出,所以你不會得到一個SIGPIPE。只有當你試圖寫入管道時,你纔會明白,即stdout –