2012-02-13 12 views
5

Se è così, come posso scoprire qual è il processo (tra tutti gli altri sul sistema) e come lo uccido in modo tale che il suo shutdownhook venga eseguito?E 'possibile che un processo java in un jvm uccida/fermi un altro processo java in un altro jvm?

motivo che voglio fare questo è perché voglio implementare qualcosa di simile inizio apache, fermata apache per cui dopo aver invocato inizio apache o arresto apache, un processo server si avvia o si arresta in background e ottengo il comando o bash spingono indietro ; questo suppone di funzionare sia su Linux che su Windows.

risposta

2

U può pensare di aprire un servizio sul lato del servo, che è per chiudere se stesso, per essere gestito dall'applicazione master.

D'altra parte, se non si vuole farlo, è necessario trovare un modo per ottenere i processi di un'istanza di jvm. Se vuoi solo uccidere jvm, sarebbe facile ma per un processo specifico. U bisogno di aiuto Penso, in questo modo:

link

spero che funziona per u

+0

Ho pensato alla cosa del socket, ma ho deciso contro il fatto che sarebbe piuttosto rischioso per un server esporre un altro socket al mondo in cui chiunque può inviare un messaggio falso (anche con SSL abilitato) a meno che, ovviamente, socket ascolta solo le connessioni dall'host locale e non dalla rete, è possibile? – shawn

+0

Ovviamente è possibile. U può definire le autorizzazioni per l'app principale sul firewall e impedire che il sistema attacchi. Inoltre, l'idea di dare la responsabilità di chiudere l'applicazione all'applicazione stessa è una buona cosa, penso. – Neron

4

E 'possibile, ma sarà il sistema operativo specifico. Non c'è nulla nella JVM che ti dia accesso automatico per uccidere altre VM.

Avrete bisogno di chiamare il comando kill del vostro sistema operativo (o equivalente) o scrivere un codice nativo.

Può essere fatto, e se si sta solo andando su sistemi unix-like, la soluzione migliore sarebbe scrivere uno script di shell che faccia ciò che si desidera, e quindi eseguirlo con ProcessBuilder e amici.

0

Penso che tu possa usare JMX.

È possibile avviare un server JMX nel processo Java e aprire alcune API come start e stop.

Con JMX, non è necessario implementare nulla su socket e autorizzazione. Hai solo bisogno di fornire una funzione chiamata da remoto con JMX. È inoltre possibile impostare un utente e una password per l'accesso.

Problemi correlati