Ejecución de procesos nativos y su comunicación con Java

Al estudiar los mecanismos de para crear procesos y su comunicación entre procesos en Unix (Linux) estudiamos fork, pipes entre otros. Java también dispone de mecanismos para correr procesos nativos y relacionarse con ellos.
La clase RunTime dispone del método exec, el cual crea un proceso nativo y retorna una instancia de una subclase de 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 le proceso (salida estándar de éste), escrituras hacia el proceso (entrada estándar el 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.
Todos las operaciones de io (stdin, stdout, stderr) del proceso 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 servicio disponible en la máquina vía io estándar.