Linux에서 ProcessBuilder 클래스를 사용하여 mp3 파일을 wav 파일로 디코딩하려고합니다. 어떤 이유로 프로세스가 중지되지 않아 수동으로 취소해야합니다.ProcessBuilder가 중지되지 않습니다.
누군가 내게이 힌트를 줄 수 있습니까? jstack을의
import java.io.*;
public class Test {
public static void main(String[] args) {
try {
Process lameProcess = new ProcessBuilder("lame", "--decode", "test.mp3", "-").start();
InputStream is = lameProcess.getInputStream();
FileOutputStream fileOutput = new FileOutputStream("test.wav");
DataOutputStream dataOutput = new DataOutputStream(fileOutput);
byte[] buf = new byte[32 * 1024];
int nRead = 0;
int counter = 0;
while((nRead = is.read(buf)) != -1) {
dataOutput.write(buf, 0, buf.length);
}
is.close();
fileOutput.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
출력을
"main" prio=10 tid=0x0000000002588800 nid=0x247a runnable [0x00007f17e2761000]
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:236)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
- locked <0x00000000eb5b1660> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at Test.main(Test.java:17)
'Process' 객체에서'waitFor()'메서드가 호출되지 않아야합니까? – biziclop
어디서 멈 춥니 까? 'jstack'또는'kill -3 '를 쓰레드 덤프를 얻는다. –
당신이'read()'호출에 매달린 것처럼 보입니다. 외부 프로세스가 종료 되었습니까? –