Ejecución de procesos
nativos y su comunicación con Java
Al estudiar los mecanismos para crear
procesos y su comunicación entre
procesos en Unix (Linux) estudiamos fork y pipes entre otros. Java
también dispone de mecanismos para correr otros procesos (externos a la máquina virtual Java) y
relacionarse con ellos.
La clase RunTime dispone del método exec, el cual permite ejecutar un
programa cualquiera disponible en la máquina (proceso nativo) y retorna
una instancia de una subclase de la clase Process.
Ésta puede ser usada para controlar el proceso y obtener
información sobre éste.
La clase Process provee métodos para hacer lecturas desde el
proceso (salida estándar de éste), escrituras hacia el
proceso (entrada estándar del proceso), esperar por el
término del proceso, y destruir (kill) el proceso.
Para más detalles ver página
descriptiva de la clase RunTime, y la documentación
de la clase Process.
Espero que usted note que gracias al estudio hecho antes sobre el
manejo de procesos en Unix, la comprensión de estas clases se facilita.
Todas las operaciones de IO (stdin, stdout, stderr) del proceso creado con método exec son
redirigidas al proceso padre a través de tres flujos
(Process.getOutputStream(), Process.getInputStream(),
Process.getErrorStream()).
JavaPing es un
ejemplo donde invocamos al comando ping desde Java. La salida
estándar del ping es mostrada por pantalla por Java. Análogamente
podemos hacer uso de cualquier programa o servicio disponible en la máquina
vía IO estándar.