访问创建它的bash脚本之外的协同进程

时间:2016-06-14 19:35:04

标签: java bash coproc

所以我在脚本中使用coproc命令运行java程序并向其输入输入,如下所示:

#!/bin/bash

echo Script started.
coproc java -jar MultiThreadedFileProcessor.jar
echo start >&${COPROC[1]}
echo Script terminated.

我希望能够编写另一个可以向该程序传递更多输入的脚本(例如,一个命令将告诉程序运行终止例程)。

有没有办法可以从另一个脚本访问协同进程的stdin?我目前对终止脚本的尝试如下:

#!/bin/bash

echo Script started.
echo terminate >&${COPROC[1]}
echo close >&${COPROC[1]}
echo Script terminated.

这给了我一个ambiguous redirect错误,但我猜测是因为COPROC [1]只在创建coproc的脚本中定义。

如果有的话,我是否可以编写一个脚本来完成将行传递给java程序的目标?

1 个答案:

答案 0 :(得分:0)

COPROC是第一个脚本的本地数组-您将永远无法从另一个脚本访问该数组。 在Linux上,您可以访问/ proc / $ pid / fd / $ n,其中$ pid是第一个脚本的pid,而$ n是存储在$ {COPROC [1]}中的fd。两者都必须在某个地方(一个pid文件,同样是一个“ fd文件”)进行通信,但是在那种情况下,最好不要创建一个命名管道(integer overflow),并使用它而不是在第一个中创建coproc地点。这样的代码(未经测试):

脚本1:

mkfifo

脚本2:

mkfifo fifoname
exec 5>fifoname
java <fifoname &
echo close >&5

exec 5>fifoname echo terminate >&5 echo close >&5 命令应该做什么? Java程序将会看到

close

对Java程序有意义吗?