2016-05-26 12 views
6

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) 

risposta

2

Il messaggio di errore significa che Java non riesce a trovare un metodo nativo da chiamare.

Dato che il metodo nativo che sta tentando di chiamare fa parte di JRE, posso solo suggerire che l'installazione di Java su quella macchina interessata si è in qualche modo sporcata.

Se ho visto quel messaggio di errore, vorrei disinstallare completamente Java da quella casella e reinstallarlo. Tuttavia, non so se sia un'opzione per te.

+0

Oh, ok! Questo ha senso, grazie – Kayvar

+0

Sì, ha funzionato! – Kayvar

Problemi correlati