Col*_*ell 6 shell clojure pocketsphinx
我正在尝试从 clojure 运行pocketsphinx。我编写了以下 .sh 脚本
unbuffer pocketsphinx_continuous -innmic yes > pipe 我想使用(shell/sh)调用这个过程。
Unbuffer 允许 Pocketsphinx 正确地将其数据刷新到可以逐行读取的管道中。
我遇到的问题是我不知道如何正确终止进程。它将永远运行并且永远不会返回控制权。如果我杀死它正在运行的线程,则 sh 命令产生的进程仍然运行。我能想到的唯一的事情是运行kill在pid
clojure.java.shell/sh在正在执行的进程完成之前不会返回,并且您需要使用另一个线程来对 pid 使用kill。
另一种解决方案是使用java.lang.Runtime.execorjava.lang.ProcessBuilder获取java.lang.Process提供类似destroyor方法的实例destroyForcibly。
如果您仍然希望拥有一个不错的 Clojure API,并且仍然能够运行命令并指定进程完成的超时,并且仍然获得输出,直到超时发生,您还可以使用Raynes/conch库。