2012-01-20 57 views
5

Tôi đang sử dụng Java Attach API để kết nối với các JVM cục bộ. tôi đang làm một cái gì đó như saujava VirtualMachine.getSystemProperties() bế tắc

VirtualMachine vm = VirtualMachine.attach("8400"); 
Properties props = vm.getSystemProperties(); 

chạy trên một máy cửa sổ, nếu máy ảo tôi đang kết nối đến là tắt máy giữa đính kèm và các cuộc gọi getSystemProperties, getSystemProperties() sẽ chặn vĩnh viễn và tạo ra một bế tắc trong chủ đề đó. Tôi đã truy tìm khối xuống đến WindowsVirtualMachine.connectPipe(). nó là một phương thức riêng, vì vậy trong hàm WindowsVirtualMachine.c connectPipe có một cuộc gọi đến ConnectNamedPipe. Tôi đã nhìn thấy một vài bài viết về ConnectNamedPipe bế tắc trên các máy Windows. Tôi đã cố gắng làm gián đoạn chuỗi bị chặn, nhưng điều đó không bỏ chặn chuỗi.

Tôi không hoàn toàn chắc chắn giải pháp này là gì, nhưng tôi sẽ xem xét không sử dụng API đính kèm (mặc dù tôi thích gắn bó với giải pháp hiện tại của mình). Tôi đang sử dụng API đính kèm để sử dụng VirtualMachine.list() để các JVM chạy trên máy cục bộ. và sau đó từ đó tôi đang sử dụng để có được các thuộc tính hệ thống và kết nối với chúng thông qua JMX. tôi biết tôi có thể có thể tạo ra một giải pháp tùy chỉnh bằng cách sử dụng một thư viện để giao tiếp giữa các quá trình trên mạng, nhưng tôi muốn sử dụng thông tin liên lạc cấp os giữa các quá trình, đó là những gì tôi tin rằng API đính kèm đang sử dụng.

vì vậy câu hỏi của tôi là có bất kỳ giải pháp nào cho vấn đề của tôi không? hoặc có bất kỳ thư viện nào có thể cung cấp cho tôi chức năng giống như VirtualMachine.list() không?

+0

Bạn có ý gì làm gián đoạn chuỗi không hoạt động? nó không có gì? – Adrian

+0

làm gián đoạn chuỗi bị chặn không bỏ chặn nó. – mikey

+1

Cũng cố gắng dừng() các chủ đề (mà BTW là một ý tưởng tồi, nhưng xem nó hoạt động như thế nào). Đây là tài liệu cho gián đoạn: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#interrupt%28%29 – Adrian

Trả lời

0

bạn muốn điều gì xảy ra trong trường hợp này? Một giải pháp phổ biến cho một vấn đề như thế này là để có một chuỗi watcher chờ thread hoàn thành một nhiệm vụ và sau đó nếu nó không kết thúc nó trong một khoảng thời gian giả sử có một bế tắc và thoát khỏi quá trình. Rõ ràng đây là khá nặng tay nhưng không có nhiều khác bạn có thể làm trong trường hợp này sẽ là 'chính xác'.

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