我有一個bash腳本,它充當用戶登錄槽ssh的默認shell。 它提供了一個菜單,其中有幾個選項是使用netcat發送文件的。如何從bash腳本知道用戶是否突然關閉ssh會話
我使用的嵌入式Linux的netcat缺少-w選項,所以如果用戶關閉ssh連接而不發送文件,netcat命令將永遠等待。
我需要知道用戶是否突然關閉連接,以便腳本可以殺死netcat命令並正常退出。
事情我試過到目前爲止:
- 誘捕SIGHUP:它沒有發出。我發現的唯一信號是SIGCONT,但我認爲它不可靠和便攜。
- 與讀取命令的-t選項播放檢測封閉標準輸入:如果沒有這將工作在嵌入式讀命令一個愚蠢的錯誤(只超時第一次調用)
編輯:
我會盡量回答評論中的問題,並進一步解釋情況。
我的代碼是:
nc -l -p 7576 > /dev/null 2>> $LOGFILE < $TMP_DIR/$BACKUP_FILE &
wait
我忽略SIGINT和SIGTSTP,但我試圖捕獲所有的信號和接收的只有一個是SIGCONT。
閱讀bash手冊頁我發現SIGHUP應該發送到腳本和netcat,並且SIGCONT被髮送到停止的作業以確保他們收到SIGHUP。
我想等待會使腳本計數停止,所以它會收到SIGCONT,但同時等待某種程度上會吃掉SIGHUP。
所以我試着改變等待睡眠,然後收到SIGHUP和SIGCONT。
問題是:爲什麼等待阻塞SIGHUP?
編輯2:解決
我解決它輪詢與使用-t選項內建讀一個封閉的標準輸入。要解決內置讀取中的錯誤,我使用新的bash(bash -c「read -t 3 dummy」)生成它。
即使它不是一個正在運行的進程,它也不會改變。 – Figo 2010-05-13 15:13:30
劇本運行時你有什麼陷阱?陷阱命令本身應該告訴你。 – 2010-05-13 15:50:43
我已編輯帖子來回答你的問題。 – Figo 2010-05-14 09:53:33