在一个 java 程序中,我正在生成一个用于 centOS 机器的 sh 脚本,它将使用 sox 和 lame 来解码 MP3 音频文件,然后分别对文件应用一些增益。我有一些问题让 Process.waitFor() 方法做任何事情,而不是无限期地挂起。这是代码:
try
{
// TODO code application logic here
String reviewPath = "/SomeDirectory/";
String fileName = "FileName";
String extension = ".mp3";
StringBuilder sb = new StringBuilder();
sb.append("#!/bin/bash\n");
sb.append("cd " + reviewPath + "\n");
sb.append("lame --decode " + fileName + extension + "\n");
File script = new File(reviewPath + fileName + ".sh");
script.createNewFile();
script.setExecutable(true);
FileWriter writer = new FileWriter(script);
writer.write(sb.toString());
writer.close();
Process p = Runtime.getRuntime().exec(script.getAbsolutePath());
String line;
BufferedReader bri = new BufferedReader
(new InputStreamReader(p.getInputStream()));
BufferedReader bre = new BufferedReader
(new InputStreamReader(p.getErrorStream()));
while ((line = bri.readLine()) != null) {
System.out.println(line);
}
bri.close();
while ((line = bre.readLine()) != null) {
System.out.println(line);
}
bre.close();
p.waitFor();
System.out.println("Done.");
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
奇怪的是,当我运行它手动生成的 .sh 文件时,它会很好地运行并退出,但是当我从 java 中的进程对象执行它时,它永远不会退出。进程的 exitValue 始终为“进程尚未退出”。我尝试将 set -e 添加到脚本中,然后退出到脚本的末尾。没有使用 kill 命令(我真的不认为我可以在这里做)我不知道这里发生了什么。有什么建议么?