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

标签 shell clojure pocketsphinx

我正在尝试从 clojure 运行 Pocketsphinx。我编写了以下 .sh 脚本
unbuffer pocketsphinx_continuous -innmic yes > pipe我想使用(shell/sh)调用这个过程。

Unbuffer 允许 Pocketsphinx 正确地将其数据刷新到可以逐行读取的管道中。

我遇到的问题是我不知道如何正确终止进程。它将永远运行并且永远不会返回控制权。如果我终止它正在运行的线程,则 sh 命令产生的进程仍会运行。我唯一能想到的就是运行 killpid

最佳答案

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/

相关文章:

c++ - 无法启动程序。 Pocketsphinx.dll 丢失错误

python - 有没有办法在 pocketsphinx python 中返回整个字典条目(单词+音素)?

shell - 如何在后台运行命令并且没有输出?

java - 这是将 Java 映射转换为 native Clojure 映射以进行排序的最佳方法吗?

python - PocketSphinx 安装找不到 swig.exe

map - Clojure 基于优先级逻辑从 map 中提取值(value)

clojure - Clojure 中四舍五入到列表中最接近的数字

shell - Automator:操作 “Run Shell Script” 遇到错误:无法执行二进制文件

perl - 使用 bash shell 自动中断由关键字分隔的千兆字节行的最快方法是什么?

python - 在Python子进程中使用 '&'作为后台进程