2012-02-13 36 views
5

Nếu vậy, làm thế nào tôi có thể tìm ra quá trình nào (trong số tất cả những người khác trên hệ thống) và làm thế nào để giết nó như vậy mà shutdownhook của nó được thực hiện?Có thể cho một quá trình java trong một jvm để giết/dừng một quá trình java khác trong jvm?

Lý do tôi muốn làm điều này là vì tôi muốn thực hiện một cái gì đó như apache bắt đầu, apache dừng theo đó sau khi gọi apache bắt đầu hoặc apache dừng, một quá trình máy chủ bắt đầu hoặc dừng lại ở nền và tôi nhận được lệnh hoặc bash nhắc lại ; đây là giả sử để làm việc trên cả linux và windows.

Trả lời

2

U có thể suy nghĩ về việc mở một dịch vụ ở phía người hầu, để tự đóng, để được xử lý bởi ứng dụng chính.

Mặt khác, nếu bạn không muốn làm điều đó, bạn cần phải tìm cách để có được các quy trình của một cá thể jvm. Nếu u chỉ muốn giết jvm, nó sẽ dễ dàng nhưng đối với một quá trình cụ thể. U cần một số giúp đỡ tôi nghĩ, như thế này:

link

Hy vọng nó hoạt động cho u

+0

Tôi đã nghĩ về điều socket nhưng đã quyết định chống lại điều đó vì nó sẽ khá nguy hiểm cho một máy chủ để tiếp xúc với một thế giới khác, nơi mọi người có thể gửi một tin nhắn giả mạo tới nó (ngay cả khi đã bật SSL) socket chỉ lắng nghe các kết nối từ localhost chứ không phải qua mạng, có thể không? – shawn

+0

Tất nhiên điều đó là có thể. U có thể xác định quyền cho ứng dụng chính của bạn vào tường lửa và ngăn hệ thống của bạn khỏi bị tấn công. Và ngoài ra, ý tưởng đưa ra trách nhiệm đóng ứng dụng vào chính ứng dụng đó là một điều tốt mà tôi nghĩ. – Neron

4

Có thể, nhưng nó sẽ là hệ điều hành cụ thể. Không có gì trong JVM tự động cung cấp cho bạn quyền truy cập để tiêu diệt các máy ảo khác.

Bạn cần gọi tới lệnh kill của hệ điều hành (hoặc tương đương) hoặc viết một số mã gốc.

Có thể thực hiện và nếu bạn chỉ chạy trên các hệ thống giống như Unix, thì tùy chọn tốt nhất của bạn là viết kịch bản lệnh shell để thực hiện những gì bạn muốn và sau đó thực hiện nó với ProcessBuilder và bạn bè.

0

Tôi nghĩ bạn có thể sử dụng JMX.

Bạn có thể khởi động máy chủ JMX trong quy trình java của mình và mở một số API như bắt đầu và dừng.

Với JMX, bạn không cần thực hiện bất kỳ điều gì về ổ cắm và quyền. Bạn chỉ cần cung cấp một chức năng gọi là từ xa với JMX. Bạn cũng có thể đặt người dùng và mật khẩu để truy cập.

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