tôi cần phải viết mã, màJava:. Quá trình runned bởi Runtime.getRuntime() Giết exec()
- chạy quá trình với
Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
- unix tìm PID của tiến trình bằng cách thực hiện lệnh từ java đang
lsof -t -i: MYPORT
- và giết hắn bằng pid
kill -9 PID
(cũng bởi lệnh từ mã java thực hiện) - và sau đó thực hiện lệnh khác
NHƯNG
nếu tôi thực hiện lệnh này bằng cách Runtime.getRuntime().exec()
chương trình của tôi thoát với mã thoát 137 - điều này có nghĩa là khi tôi chạy Runtime.getRuntime().exec("kill -9 PID")
tôi giết quá trình programm java của tôi, nhưng không phải là chương trình, mà tôi chạy từ mã.
Tôi làm cách nào để chỉ có thể giết quá trình mà tôi chạy từ mã?
P.S. có lẽ tôi nên sử dụng ProcessBuilder?
Nếu bạn đang sử dụng 'Runtime.getRuntime()' để chạy một quá trình Java khác thì bạn đang làm điều gì sai. Tại sao bạn không thể chạy lớp trong một 'Thread'? –
1. Và nếu bạn đang giết quá trình với '-9' bạn cũng đang làm điều gì sai. Nếu quá trình có một cổng, nó cũng phải có một lệnh shutdown có thể được gửi đến cổng đó. 'kill -9' là một hành động cuối cùng cho một quản trị viên biết những gì anh ta đang làm (và ghi lại nó). Nó không nên được xây dựng trong các ứng dụng. 2. Thực tế là quá trình Java bắt đầu thoát ra với '137' không liên quan gì đến việc bạn đang giết quá trình sai. – EJP