Tôi đang sử dụng Process
qua ProcessBuilder
để chạy tệp thi hành được thực hiện trong mã C. Tôi đang bắt các Process.exitValue()
để phản ứng trên giá trị thoát này. Tôi nhận thấy không phải tất cả các giá trị thoát là từ thực thi. Ví dụ, tôi nhận được một giá trị xuất cảnh của 139 và hư không trong mã C của tôi Tôi đang trở về một giá trị xuất cảnh của 139.Ý nghĩa của các giá trị từ Java Process.exitValue() là gì?
Tôi đang cố gắng tìm tổng quan về giá trị thoát, nhưng tôi không thể tìm thấy điều này, và bây giờ tôi tìm thấy giá trị thoát có thể phụ thuộc vào hệ điều hành. (Tôi đang sử dụng Ubuntu bằng cách này).
Dường như giá trị thoát duy nhất để đảm bảo là 0 khi mọi thứ diễn ra đúng. Có thông số kỹ thuật về giá trị thoát không? Tôi có thể chắc chắn rằng một phạm vi nhất định có thể được sử dụng chỉ cho chương trình của riêng tôi? Các mã thoát được dành riêng cho hệ điều hành.
Tôi phát hiện ra rằng 139 có thể là lỗi bộ nhớ trong mã C. Tôi muốn thoát khỏi cái có thể. Tôi không thể nhận được bất kỳ khái quát về giá trị xuất cảnh (ví dụ 139 = .....)
Đây là mã đơn giản bằng cách này:
ProcessBuilder p = new ProcessBuilder(executableName,
executableArguments);
final Process shell = p.start();
InputStream shellIn = shell.getInputStream();
int shellExitStatus = shell.exitValue();
Lưu ý: Chạy C thực thi trong vỏ Ubuntu không có lỗi gì cả (ví dụ: giá trị thoát 0). Nhưng, làm lệnh tương tự trong Java cho giá trị xuất cảnh 139.
139 là lỗi _Segmentation_. Nó có nghĩa là _c-app_ của bạn đang truy cập bộ nhớ mà nó không truy cập được. – npe
[This] (http://stackoverflow.com/a/4842719/828625) trả lời câu hỏi của bạn tôi tin. –
Tìm thấy [this] (http://tldp.org/LDP/abs/html/exitcodes.html), nhưng tôi không biết nó có ý nghĩa như thế nào đối với bạn. –