6

I am trying to run pocketsphinx from clojure. I have written the following .sh script

unbuffer pocketsphinx_continuous -innmic yes > pipe and I want to call this process using (shell/sh).

Unbuffer allows pocketsphinx to properly flush its data out to pipe where it can be read line by line.

The problem I am having is I do not know how to properly kill the process. It will run forever and never return control. If I kill the thread it is running on, the process that the sh command spawned still runs. The only thing I can think of is running kill on the pid

Collin Bell
  • 585
  • 4
  • 12

1 Answers1

3

clojure.java.shell/sh won't return until the process being executed completes and you would need to use another thread to use kill on a pid.

Another solution would be to use java.lang.Runtime.exec or java.lang.ProcessBuilderto get a java.lang.Process instance which provides methods like destroy or destroyForcibly.

You can also use a Raynes/conch library if you still would like to have a nice Clojure API and still be able to run a command and specify a timeout for the process to complete and still get the output produces until the timeout occured.

Piotrek Bzdyl
  • 12,965
  • 1
  • 31
  • 49