Linux

bg 命令的奇怪行為

  • September 18, 2015

如果程序(應用程序)總是期望在終端上輸入並一直將接收到的數據從 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 &

如果您需要時不時地與程序互動,但它可以在大部分時間無人看管地繼續執行,請在終端多路復用器中執行它,例如ScreenTmux。例如,使用螢幕:

screen -S my_app ./my_app

鍵入必要的輸入,然後按Ctrl+A分離螢幕會話,即讓它在後台執行並返回原始終端。當您想再次與程序互動時,重新附加到螢幕會話:

screen -S my_app -rd

如果您需要自動執行一些複雜的互動,請編寫一個期望腳本(或具有類似庫的另一種語言的腳本)。

¹流程組,但我不打算在這裡深入探討。

引用自:https://unix.stackexchange.com/questions/230278