2010-10-21 44 views
11

Giả sử tôi có một quy trình đang chạy đang được biết, làm thế nào tôi có thể biến điều này thành đối tượng Process trong Java? Quá trình này đã chạy, vì vậy tôi không muốn sinh ra một cái khác, tôi chỉ muốn đóng gói nó vào một đối tượng Process mà tôi có thể sử dụng trong mã java. cái gì đó dọc theo dòng:Java: Nhận một quy trình được đưa ra một pid

int pid = getPid(); 
Process proc = magicGetProcess(pid); 

nhờ

+0

Tôi không nghĩ Java có đủ khả năng quản lý quy trình được tích hợp sẵn. Hy vọng rằng ai đó sẽ chứng minh tôi sai. –

+0

Chức năng nào của 'Process' bạn muốn nhất? Bạn đang cố gắng làm một 'waitFor()', hoặc bạn đang tìm kiếm để có thể chuyển hướng đầu vào/outputstreams đến ứng dụng của bạn, hoặc những gì? Tôi khá chắc chắn những gì bạn đang yêu cầu trong chính nó là không thể nhưng chúng tôi có thể có thể giúp với các yêu cầu thực tế của bạn. –

+0

Tôi cũng cần phải vượt qua trong quá trình này vào một phương pháp mà khá nhiều kiểm tra nếu nó bất ngờ chấm dứt và lấy mã thoát nếu nó đã làm. – Th3sandm4n

Trả lời

4

Tôi không nghĩ rằng đây có thể chỉ sử dụng các thư viện dựng sẵn. AFAIK, nó đã là không tầm thường để có được quá trình chạy 'PID riêng' (xem feature requestalternate mechanisms).

Xem nhanh java.lang.Process class cho thấy bạn có thể viết về cách triển khai tùy chỉnh java.lang.Process bằng cách sử dụng JNI và mã gốc. Sau đó, lớp tùy chỉnh của bạn có thể triển khai các phương thức bổ sung, chẳng hạn như phương thức trong câu hỏi của bạn.

+0

Hmm ya đó là giao diện của nó. Oh well. – Th3sandm4n

+0

FYI: url bị hỏng cho java.lang.Process – Ismoh

0

Trong mã thoát trên thế giới * nix của quy trình không phải là con không dễ dàng, vì mã thoát chỉ đơn giản biến mất cùng với quy trình ngay khi quy trình gốc đã chọn mã thoát của trẻ. Bạn có thể đính kèm vào tiến trình đang chạy bằng cách sử dụng một số công cụ truy tìm và lấy mã thoát của nó khi tiến trình chết. Hầu hết các hệ điều hành * nix đều có các công cụ dòng lệnh cho phép bạn thực hiện nó (chẳng hạn như strace trên Linux, giàn trên SunOS) theo cách không xâm phạm. Tuy nhiên, bạn chỉ có thể sử dụng chúng dựa vào các quy trình của riêng bạn hoặc nếu bạn chạy dưới dạng root. Một lựa chọn khác là định cấu hình hệ thống con kiểm tra của hệ điều hành của bạn để ghi lại mã thoát của tất cả các quy trình.

+0

Trên Unix, bạn có thể sử dụng hàm 'waitpid()' để lấy mã thoát của một tiến trình không phải con. Vấn đề là gọi nó từ Java. –

0

Bạn không thể. Mọi hoạt động trong Quy trình yêu cầu rằng quy trình là một tiến trình con. Không phải là một quá trình tùy ý.

0

điều gì về việc sử dụng RMI? Nó có thể vượt qua một đối tượng quá trình để quá trình mà nó được? Có lẽ không, bởi vì Process không phải là Serializable

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