记一次shell脚本推后台stopped的问题
我們知道linux 下shell可以被分為交互式腳本和非交互式腳本。
交互式腳本即 輸入命令之后shell會(huì)等待你的輸入,當(dāng)你輸入之后命令會(huì)被立即提交從而執(zhí)行。這個(gè)時(shí)候我們常見(jiàn)的終端bash,以及l(fā)ogin提示等都是交互式命令。
非交互式腳本即shell解釋器不需要等待終端的輸入,自己去執(zhí)行腳本中的命令,當(dāng)遇到腳本中的EOF則結(jié)束。
交互式腳本因?yàn)樾枰却K端命令的輸入,與終端進(jìn)行交互,當(dāng)將交互式腳本推后臺(tái);此時(shí)后臺(tái)程序視圖讀取終端,此時(shí)終端驅(qū)動(dòng)程序?qū)z測(cè)這種情況,并向后臺(tái)作業(yè)發(fā)送一個(gè)特定信號(hào)SIGTTIN,該信號(hào)會(huì)停止此后臺(tái)程序,并向用戶發(fā)送通知。最終推后臺(tái)的進(jìn)程會(huì)出現(xiàn)stopped狀態(tài)。
交互式腳本的退后臺(tái)使用./camSvr < /dev/null &使用null作為輸入設(shè)備,此時(shí)腳本可以正常執(zhí)行。
異常場(chǎng)景:
編寫服務(wù)器程序:calc_osd_memory.sh,使用top抓取指定進(jìn)程內(nèi)存信息,并進(jìn)行分析記錄日志。./calc_osd_memory.sh正常執(zhí)行,但是當(dāng)執(zhí)行./calc_osd_memory.sh &推后臺(tái)出現(xiàn)stopped進(jìn)程被終止。
因?yàn)槟_本中存在交互式命令top,使用方式為/usr/bin/top -n 1 -c -u ceph,此時(shí)腳本中主要獲取信息的外界命令為top,經(jīng)過(guò)分析出現(xiàn)此時(shí)stopped是通過(guò)其他程序或者腳本在非交互模式下調(diào)用top就會(huì)出現(xiàn),解決方式是去掉top的交互模式,使用批處理模式如下:
增加-b參數(shù):/usr/bin/top -n 1 -c -b -u ceph
參數(shù)描述:
Starts top in ‘Batch’ mode, which could be useful for sending output from top to other programs or to a file.
In this mode, top will not accept input and runs until the iterations limit you’ve set with the ‘-n’ command-line option or until killed.
總結(jié)
以上是生活随笔為你收集整理的记一次shell脚本推后台stopped的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言网络编程:多路IO select实
- 下一篇: C语言的单链表逆序和指定范围逆序