与后台进程(I / O)的双向通信

时间:2011-09-10 18:40:09

标签: shell command-line io communication

我有一个在命令行中运行的程序(即$ run program启动提示),该程序运行数学计算。它有自己的提示,它接收文本输入并通过标准输出/错误作出响应(或者如果需要可以创建一个单独的x窗口,但这可以被禁用)。有时我想发送小输入,有时我发送一个大文本文件,每行都有一系列输入。该程序占用大量资源并且启动时间很长,因此最好一次只运行一个实例。我可以保持打开程序提示并以这种方式提供输入,或者我可以使用退出命令(保留提示)发送进程,该命令只打印输出。使用exit命令发送请求的问题是程序必须每次启动(慢...)。此外,该程序的输出有时是神秘的,以某种方式过滤输出会有所帮助(例如,简化输出,应用ANSI颜色等)。

这一切都让我想在程序周围放置一些双向IO过滤器(或者说是“管道”?或“包装器”?),这样程序就可以在后台作为单个进程运行。然后我会与它进行通信,而不必重新启动。我也希望在过滤输出时更加用户友好。我一直在寻找想法,我很难在一些简单的shell可访问的庄园中完成这个。

我尝试过的一些事情是将stdin和stdout重定向到文件,但程序挂起(不退出)并且只读取文件一次使我无法继续通信。我认为这是因为提示在EOF之后等待一些用户输入。我认为这可以设置为本地服务器,但我不确定如何开始实现它。

我很想找到一些简单的方法来实现这一目标。此外,如果您能想出一种方法来执行此操作,您认为还有一种方法可以通过请求附加或分离提示吗?任何帮助和想法将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以创建两个命名管道(man mkfifo)并重定向输入和输出:

myprog < fifoin > fifoout

然后你可以打开新的终端窗口并在一个窗口中执行此操作:

cat > fifoin

这是另一个:

cat < fifoout

(或者使用tee来保存输入/输出。)

要将大型输入文件转储到程序中,请使用:

cat myfile > fifoin