2016-05-26 34 views
6

Tôi đang cố gắng chạy lệnh "/home/simulations/scripts/getDsuIp.sh" không có đối số.Java: "UNIXProcess" lỗi khi sử dụng "exec" hoặc "ProcessBuilder" để chạy lệnh

Khi tôi chạy lệnh này theo cách thủ công trên máy, nó hoạt động rất tốt! Vì vậy, các tập tin chắc chắn là có, chắc chắn là runnable (755) và dưới cùng một người dùng (gốc). Vấn đề xảy ra khi tôi cố gắng chạy một chương trình Java thực thi tệp này. Tôi chỉ thấy vấn đề này trên một máy, nó hoạt động ở những nơi khác, nhưng tôi muốn tìm ra lý do tại sao nó không thành công.

Chạy quá trình sử dụng ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("/home/simulations/scripts/getDsuIp.sh"); 
Process p = pb.start(); 

này mang lại cho tôi những lỗi sau:

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) 

Tôi cũng đã thử những cách khác để chạy nó là tốt, kết quả là lỗi tương tự:

Chạy quy trình bằng cách sử dụng exec

Đây là một trong các cách Tôi đã thử sử dụng exec để chạy nó:

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(); 

Điều này không thành công trên dòng thứ hai khi nó cố gắng chạy hàm "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) 

Thử # 2 với Process Builder

tôi đã cố gắng thực hiện giải pháp này: 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(); 
     } 

Nhưng tôi nhận được lỗi tương tự:

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) 

Có ai biết những gì "java.lang.UnsatisfiedLin Lỗi kError: java.lang.UNIXProcess "có nghĩa là gì?

Version Java:

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) 

Trả lời

2

Các thông báo lỗi có nghĩa là Java không thể tìm thấy một phương pháp tự nhiên để gọi.

Cho rằng phương pháp gốc mà nó đang cố gắng gọi là một phần của JRE, tôi chỉ có thể đề nghị cài đặt Java trên một máy bị ảnh hưởng đã bị loại bỏ bằng cách nào đó.

Nếu tôi thấy thông báo lỗi đó, tôi muốn gỡ cài đặt hoàn toàn Java khỏi hộp đó và cài đặt lại. Tuy nhiên, tôi không biết đó là một lựa chọn cho bạn.

+0

Ồ, ok! Điều đó có ý nghĩa, cảm ơn bạn – Kayvar

+0

Yup, nó đã hoạt động! – Kayvar

Các vấn đề liên quan