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

我试图从clojure运行pocketsphinx.我写了以下.sh脚本

unbuffer pocketsphinx_continuous -innmic yes>管道,我想使用(shell / sh)调用此过程.

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

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

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

另一种解决方案是使用java.lang.Runtime.execjava.lang.ProcessBuilder来获得java.lang.Process实例,该实例提供诸如destroydestroyForcibly之类的方法.

如果你仍然想要一个漂亮的Clojure API并且仍然能够运行命令并指定timeout for the process to complete and still get the output produces until the timeout occured,你也可以使用Raynes/conch库.

点赞