在Clojure中,如何将退出命令发送到由Clojure.java.shell/sh创建的进程

时间:2016-09-09 21:49:45

标签: shell clojure pocketsphinx

我正在尝试从clojure运行pocketsphinx。我写了以下.sh脚本

unbuffer pocketsphinx_continuous -innmic yes > pipe我希望使用(shell / sh)调用此过程。

Unbuffer允许pocketsphinx正确地将其数据刷新到管道,在那里可以逐行读取。

我遇到的问题是我不知道如何正确杀死这个过程。它将永远运行,永远不会返回控制。如果我杀死正在运行的线程,则sh命令生成的进程仍会运行。我唯一能想到的就是在kill

上运行pid

1 个答案:

答案 0 :(得分:2)

clojure.java.shell/sh不会返回,直到正在执行的进程完成,你需要使用另一个线程在pid上使用kill。

另一种解决方案是使用java.lang.Runtime.execjava.lang.ProcessBuilder来获取java.lang.Process个实例,该实例提供destroydestroyForcibly等方法。

如果你仍然希望拥有一个漂亮的Clojure API并且仍然可以运行命令并指定Raynes/conch,那么你也可以使用timeout for the process to complete and still get the output produces until the timeout occured库。