2012-02-13 15 views
5

En caso afirmativo, ¿cómo puedo averiguar qué proceso es (de todos los demás en el sistema) y cómo lo elimino para que se ejecute su cierre?¿Es posible que un proceso Java en un jvm mate/detenga otro proceso java en otro jvm?

Motivo que quiero hacer es porque quiero implementar algo como apache start, apache stop por el cual después de invocar apache start o apache stop, un proceso de servidor se inicia o se detiene en segundo plano y recibo el comando o bash prompt ; se supone que esto debe funcionar tanto en Linux como en Windows.

Respuesta

2

U puede pensar en abrir un servicio en el lado servidor, que es para cerrarlo, para ser manejado por la aplicación maestra.

Por otro lado, si no quieres hacerlo, debes encontrar la manera de obtener los procesos de una instancia de jvm. Si solo quieres matar a jvm, sería fácil, pero para un proceso específico. U necesidad de un poco de ayuda Creo que, como este:

link

espero que funcione para u

+0

He pensado en el tema del socket, pero decidí no hacerlo, ya que sería bastante arriesgado para un servidor exponer otro socket al mundo donde cualquiera pueda enviarle un mensaje falso (incluso con SSL habilitado) a menos que, por supuesto, socket solo escucha las conexiones del localhost y no a través de la red, ¿es posible? – shawn

+0

Por supuesto que es posible. U puede definir permisos para su aplicación maestra en su firewall e impedir que su sistema los ataque. Y también, la idea de dar la responsabilidad de cerrar la aplicación a la aplicación en sí misma, es algo bueno, creo. – Neron

4

Es posible, pero será el sistema operativo específico. No hay nada en la JVM que le dé acceso automáticamente para matar a otras máquinas virtuales.

Deberá llamar al comando kill de su sistema operativo (o equivalente) o escribir algún código nativo.

Se puede hacer, y si solo vas a ejecutar en sistemas unix, entonces tu mejor opción sería escribir un script de shell que haga lo que quieras, y luego ejecutarlo con ProcessBuilder y amigos.

0

Creo que puede usar JMX.

Puede iniciar un servidor JMX en su proceso java, y abrir algunas API como inicio y parada.

Con JMX, no necesita implementar nada sobre socket y permiso. Solo necesita proporcionar una función llamada por control remoto con JMX. También puede configurar un usuario y contraseña para acceder.

Cuestiones relacionadas