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



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

unbuffer pocketsphinx_continuous -innmic yes > pipe,我想使用(shell/sh)调用这个进程。

Unbuffer允许pocketsphinx正确地将数据刷新到管道中,以便逐行读取。

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

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

另一个解决方案是使用java.lang.Runtime.execjava.lang.ProcessBuilder来获得java.lang.Process实例,该实例提供了类似destroydestroyForcibly的方法。

你也可以使用Raynes/conch库,如果你仍然想有一个很好的Clojure API,仍然能够运行一个命令,并指定一个超时的进程完成,仍然得到输出产生,直到超时发生。

最新更新