Bash 发送到后台后直接输入到ncurses软件

Bash 发送到后台后直接输入到ncurses软件,bash,background-process,ncurses,Bash,Background Process,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

专家们,我有个问题要问你们

我有一个服务器,它使用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
一切运行都很顺利,但有一点:服务器没有等待按键停止,而是突然停止。 我认为输入重定向有问题,但我真的需要你的建议。提前谢谢

玩得开心

女朋友

注意:服务器可缩减为:

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

要保持输入重定向到前台作业,必须在监视器模式下运行脚本。 加:

到脚本的第一行。因此,您将有:

#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

听起来您需要期望与服务器进行交互。删除省略号并包括诅咒。h,简化程序会按预期响应^Z。需要更多的信息。诅咒显然已经包括在内,问题不是键盘快捷键,而是自动行为。感谢格伦的建议。我已经解决了这个问题,答案如下。@Thomas谢谢你的排版修正!根据bash的,默认情况下,-m处于启用状态。那么,为什么有证据表明脚本在没有指定的情况下不工作,但在指定的情况下工作?也许您是以非交互方式运行脚本,例如,从启动器或cronjob运行脚本。问题没有提供详细信息。从命令行运行它应该有-m的默认记录。可能发回-带到前端序列只是导致它不能在监视模式下运行。如果它这么简单,ncurses应用程序就不能挂起和恢复这是一个可靠工作了20年的功能。
#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