I am trying to decode an mp3 file to a wav file by using the ProcessBuilder class under Linux. For some reason the process does not stop so that I have to cancel it manually
You need to drain both the output (via getInputStream()
) and error (via getErrorStream()
) streams of the process, otherwise it may block.
Quoting the Process documentation:
Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.
(which applies to both the error and output streams)
You'll probably need to drain each stream in different threads because each may block when it has no data.