我正在尝试从 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.exec
或 java.lang.ProcessBuilder
得到一个 java.lang.Process
提供诸如 destroy
之类的方法的实例或 destroyForcibly
.
您也可以使用 Raynes/conch库,如果你仍然想要一个很好的 Clojure API 并且仍然能够运行命令并指定一个 timeout for the process to complete and still get the output produces until the timeout occured .
关于shell - 在 Clojure 中,如何向 Clojure.java.shell/sh 创建的进程发送退出命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39420195/