我正在尝试从clojure运行pocketsphinx。我写了以下.sh脚本
unbuffer pocketsphinx_continuous -innmic yes > pipe
我希望使用(shell / sh)调用此过程。
Unbuffer允许pocketsphinx正确地将其数据刷新到管道,在那里可以逐行读取。
我遇到的问题是我不知道如何正确杀死这个过程。它将永远运行,永远不会返回控制。如果我杀死正在运行的线程,则sh命令生成的进程仍会运行。我唯一能想到的就是在kill
pid
答案 0 :(得分:2)
clojure.java.shell/sh
不会返回,直到正在执行的进程完成,你需要使用另一个线程在pid上使用kill。
另一种解决方案是使用java.lang.Runtime.exec
或java.lang.ProcessBuilder
来获取java.lang.Process
个实例,该实例提供destroy
或destroyForcibly
等方法。
如果你仍然希望拥有一个漂亮的Clojure API并且仍然可以运行命令并指定Raynes/conch,那么你也可以使用timeout for the process to complete and still get the output produces until the timeout occured库。