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 procesos nativos 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 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.
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 servicio disponible en la máquina vía io estándar.