Я использую команду Unix sudo, и она отлично работает там.
sudo -u xfbcft -i
Проблема заключается в том, что когда я пытаюсь сделать то же самое, почему я использую Java Builder, яв разрешении отказано в исключении в Unix.
public class Test {
public static void main(String args[]){
System.out.println("Going to execute:");
runUnixComand();
}
private static void runUnixComand() {
Process p;
StringBuffer output = new StringBuffer();
try {
String [] cmdArray ={"sudo -u xfbcft -i ","cftping -v","exit"};
ProcessBuilder builder = new ProcessBuilder(cmdArray);
builder.redirectErrorStream(true);
//builder.redirectOutput();
Process process = builder.start();
InputStream is = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println("op:"+line);
}
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}}
Ниже приведена строка исключения, которую я получаю на терминале Unix.
java.io.IOException: Cannot run program "sudo -u xfbcft -i ": error=13, Permission denied
java.io.IOException: Cannot run program "sudo -u xfbcft -i ": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at JdbcTest.runUnixComand(JdbcTest.java:23)
at JdbcTest.main(JdbcTest.java:8)
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
Примечание. У меня есть записи в файле sudoers, а отдельные команды работают в Unix.Кроме того, пользователь, выполняющий эту Java-программу и отдельную команду, является тем же.Пожалуйста, руководство.