2015-04-21 49 views
0

我有一個問題給你的專家。發送到後臺直接輸入到ncurses軟件

我有一臺服務器,它使用ncurses來顯示MPI軟件通過套接字發送的數據。我試圖在後臺啓動服務器,啓動MPI進程,然後恢復服務器。

我寫了一個小bash腳本:

echo "starting monitor" 
./server & 
jobnumber=$(jobs | grep './server &' | grep -o '\[[0-9]*\]' | cut -d "[" -f2 | cut -d "]" -f1) 

mpiexec [...] 

fg $jobnumber 

一切順利,但一兩件事:服務器不等待的按鍵就不行了,突然死亡。 我認爲輸入重定向有問題,但我真的需要你的建議。提前致謝!

玩得開心

GF

P.S:服務器可以簡化爲:

int main(){ 
    initscr(); 
    [...] 
    getch(); 
    endwin(); 
    return 0; 
} 
+0

聽起來像是你需要'expect'與服務器進行交互。 –

+0

刪除省略號幷包含'curses.h',縮減的程序按預期響應'^ Z'。需要更多信息。 –

+0

Curses顯然已被包括在內,問題不在於鍵盤快捷鍵,而是自動行爲。 感謝glenn的建議。 我已經解決了這個問題,解決方案在下面的答案。 – jetstream

回答

0

保持輸入重定向,你必須運行在監控模式下運行腳本前臺作業。 加入:

set -m 

到腳本的第一行。所以你必須:

#Set monitor mode 
set -m 

echo "starting monitor" 
./server & 
jobnumber=$(jobs | grep './server &' | grep -o '\[[0-9]*\]' | cut -d "[" -f2 | cut -d "]" -f1) 

mpiexec [...] 

fg $jobnumber 

現在輸入重定向的工作原理就像一個魅力。 玩得開心

GF

+0

根據bash的[手冊頁](http://linux.die.net/man/1/bash),'-m'默認是打開的。 –

+0

那麼爲什麼證據證明腳本沒有工作,但與它指定的工作? – jetstream

+0

也許你正在以非交互方式運行腳本,例如從一個啓動器或cronjob(該問題沒有提供詳細信息)。從命令行運行它應該有'-m'的文檔默認值。 –