2010-06-30 37 views
16

Làm cách nào để gửi tín hiệu POSIX từ bên trong JVM? (trong Java hoặc Clojure)Gửi tín hiệu POSIX từ JVM

Tôi chưa bao giờ nghĩ rằng đây sẽ là vấn đề cho đến khi tôi cố gắng - có rất nhiều thông tin về các tín hiệu xử lý, nhưng không có gì về việc gửi chúng.

Thiếu sử dụng JNI hoặc gọi trình bao để thực hiện "giết", có cách nào khác để gửi tín hiệu đến PID không?

+0

cũng xem http://stackoverflow.com/questions/7835212/how-to-send-sigint-signal-from-java-to-an-external-process –

+0

Cụ thể là nhận xét này: http: // stackoverflow. com/a/10115987/18187 – ddimitrov

Trả lời

9

Ok. Trả lời bản thân: Tôi đã xem các thư viện được đề xuất, nhưng tôi cảnh giác với việc giới thiệu các phụ thuộc mới vào nhiều mã, đặc biệt nếu tôi chỉ sử dụng một phần nhỏ của nó.

Hóa ra cách dễ nhất là sử dụng JNA và giao diện với API hệ thống (libc). Trong clojure này một lượng khá nhiều tới:

(jna-gọi Integer giết pid signo)

sau khi làm một (: sử dụng net.n01se.clojure-jna) tất nhiên.

Vì phần mềm này không có ý định chạy trên Windows, tôi ổn với giải pháp này sẽ hoạt động trên tất cả các hệ thống POSIX (MacOS và Linux là những gì tôi quan tâm).

5

Tín hiệu POSIX là các chức năng cụ thể của OS, nhưng JVM được thử là VM độc lập OS. Vì vậy, không có chức năng tiêu chuẩn cho việc này.

Nhưng bạn có thể thực hiện các lệnh shell (sử dụng Runtime lớp) hoặc sử dụng một số lbrary cho nhu cầu của bạn, giống như một Posix for Java

+0

+1 Posix cho Java trông giống như tùy chọn sạch nhất (nếu bạn có thể triển khai các thư viện JNI). Nếu không, việc thực thi 'kill' có vẻ chấp nhận được. – sleske

+0

Hmmm ... xem xét tài liệu 'Posix for Java' và một số trong các lớp đó có khả năng làm mất ổn định JVM của bạn nếu được sử dụng bất cẩn. –

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