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)
Ồ, ok! Điều đó có ý nghĩa, cảm ơn bạn – Kayvar
Yup, nó đã hoạt động! – Kayvar