Sto provando a eseguire il comando "/home/simulations/scripts/getDsuIp.sh" senza argomenti.Java: errore "UNIXProcess" quando si utilizza "exec" o "ProcessBuilder" per eseguire un comando
Quando eseguo questo comando manualmente sulla macchina, funziona benissimo! Quindi il file è sicuramente lì, è sicuramente eseguibile (755) ed è sotto lo stesso utente (root). Il problema si presenta quando provo ad eseguire un programma Java che esegue questo file. Ho visto questo problema solo su una macchina, funziona in altri posti, ma mi piacerebbe capire perché non funziona.
L'esecuzione del processo utilizzando ProcessBuilder
ProcessBuilder pb = new ProcessBuilder("/home/simulations/scripts/getDsuIp.sh");
Process p = pb.start();
Questo mi dà il seguente errore:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V
at java.lang.UNIXProcess.init(Native Method)
at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:136)
at mycompany.PCtrlDsu.main(PCtrlDsu.java:41)
Ho provato anche altri modi per eseguire esso pure, causando lo stesso errore:
Esecuzione del processo tramite exec
Ecco uno dei modi Ho provato con exec di eseguirlo:
String[] cmd = {"/home/simulations/scripts/getDsuIp.sh"};
Process p = Runtime.getRuntime().exec(cmd);
InputStream in = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String result = br.readLine();
p.waitFor();
System.out.println ("exit: " + p.exitValue());
p.destroy();
Questo non sulla seconda linea quando si tenta di eseguire la funzione "exec".
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V
at java.lang.UNIXProcess.init(Native Method)
at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:110)
at mycompany.PCtrlDsu.main(PCtrlDsu.java:55)
Prova # 2 con il costruttore di processo
ho provato attuare questa soluzione: Running Shell Script From External Directory: No such file or directory
String script = "getDsuIp.sh";
try {
Process awk = new ProcessBuilder("/bin/bash", "/home/simulations/scripts/" + script).start();
awk.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
ma ottengo lo stesso errore:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V
at java.lang.UNIXProcess.init(Native Method)
at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:143)
at mycompany.PCtrlDsu.main(PCtrlDsu.java:41)
Qualcuno sa che cosa "java.lang.UnsatisfiedLin Errore kError: java.lang.UNIXProcess "?
Java Version:
java version "1.7.0_79"
OpenJDK Runtime Environment (fedora-2.5.5.0.fc20-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
Oh, ok! Questo ha senso, grazie – Kayvar
Sì, ha funzionato! – Kayvar