Linux
bg 命令的奇怪行為
如果程序(應用程序)總是期望在終端上輸入並一直將接收到的數據從 uart 發送到 stdout,如何將程序(應用程序)發送到後台?
我無法使用 CTRL+Z & bg %number / bg %% 將我的應用程序發送到後台。
任何想法,有什麼問題?
我的設備(程序)在發送到後台之前需要來自終端的一些輸入命令進行配置。嘗試將其發送到後台時出現錯誤。
# [CTRL-Z] [1]+ Stopped sudo ./my_app # bg %1
它向我展示了這樣的東西:
[1]+ Stopped sudo ./my_app
當後台執行的程序嘗試從終端讀取時,它會被 SIGTTIN 信號停止。輸入目前正在進入前台程序¹;如果輸入隨機進入前台程序或後台程序,則會造成乾擾。所以後台程序被掛起,直到它被放到前台。
如果您只需要在開始時將數據傳遞給您的程序,請將數據通過管道傳輸到其中。
echo "config=foo" | ./my_app &
如果您需要時不時地與程序互動,但它可以在大部分時間無人看管地繼續執行,請在終端多路復用器中執行它,例如Screen或Tmux。例如,使用螢幕:
screen -S my_app ./my_app
鍵入必要的輸入,然後按
Ctrl
+A
分離螢幕會話,即讓它在後台執行並返回原始終端。當您想再次與程序互動時,重新附加到螢幕會話:screen -S my_app -rd
如果您需要自動執行一些複雜的互動,請編寫一個期望腳本(或具有類似庫的另一種語言的腳本)。
¹流程組,但我不打算在這裡深入探討。