Trabajar con procesos en JAVA

¿QUE SON LOS PROCESOS?

Un proceso es un programa en ejecución. Este concepto no se refiere únicamente al código y a los datos, sino que incluye todo lo necesario para su ejecución.

También se puede definir un proceso como una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados.

Los procesos son independientes entre sí aunque ejecuten la misma aplicación. Por ejemplo, en un momento dado puede haber dos ejecuciones del bloc de notas, siendo cada una, un proceso. Cada uno tendrá distintas imágenes de memoria, valores distintos del contador de programa y con distintos valores de estado de procesador.

Los procesos tienen varios estados y pueden cambiar de estado a lo largo de su ejecución:

Nuevo: el proceso está siendo creado a partir del fichero ejecutable.

Listo: el proceso no se encuentra en ejecución aunque está preparado para hacerlo. El sistema operativo no le ha asignado todavía un procesador para ejecutarse.

En ejecución: el proceso se está ejecutando. El sistema operativo utiliza el mecanismo de interrupciones para controlar su ejecución.

Bloqueado: el proceso está bloqueado esperando que ocurra algún suceso. Cuando ocurre el evento que lo desbloquea, el proceso no pasa directamente a ejecución sino que tiene que ser planificado de nuevo por el sistema.

Terminado: el proceso ha finalizado su ejecución y libera su imagen de memoria.

Suspendido: se puede suspender la ejecución de un proceso llevándolo a memoria virtual para liberar espacio.

Creación de procesos en Java

La clase que representa un proceso en Java es la clase Process.
Las clases ProcessBuilder y Runtime permiten la creación e interacción con procesos.

Los métodos ProcessBuilder.start() y Runtime.exec() crean un proceso nativo y devuelven una instancia de una subclase de Process que se puede emplear para gestionar el proceso y obtener información sobre él.

Podemos comenzar un proceso creando una instancia de la clase ProcessBuilder para posteriormente invocar al método start() del proceso creado.


ProcessBuilder proceso= new ProcessBuilder(notepad.exe);
Process process = proceso.start();

Los argumentos empleados para construir el ProcessBuilder deben contener, al menos, el nombre de la aplicación. Opcionalmente, se pueden incluir sus parámetros.

También podemos crear la instancia de la clase vacía e indicar el nombre del proceso a crear, así como sus parámetros, en el método command de ProcessBuilder():


ProcessBuilder proceso = new ProcessBuilder();
proceso.command(notepad.exe);
Process process = proceso.start();

Enviar parámetros al proceso

Los parámetros que admiten son los siguientes:

List<String>: es un interface implementado por las clases AbstractLists, AbstractSequentialList, ArrayList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector.

String … : los tres puntos después del tipo de parámetro permiten especificar un número arbitrario de valores. Es útil cuando no sabemos de antemano cuántos parámetros se necesitan de un tipo dado.

Para crear un proceso que ejecutase el bloc de notas empleando la clase Runtime, haríamos lo siguiente:


Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(“notepad.exe”);

En la aplicación que voy a hacer, intentaremos acceder a VirtualBox y ver o crear máquinas virtuales a través de un programa JAVA

Lo primero que haremos será una biblioteca que contenga todos los métodos que usaremos más tarde, para así no repetir código.

Para ello necesitamos sobrecargar el constructor varias veces (recibiendo parámetros distintos), porque así podemos emplear Runtime o ProcessBuilder según queramos y un método, que yo he llamado crearCanalesComunicación. En este método haremos un BufferedReader(para poder «escuchar» la salida de VirtualBox) y un PrintStream(para poder «mandarle» datos a VirtualBox).

Una vez hecho esto, necesitamos métodos para leer y escribir líneas.

Y un método para finalizar buffers, printstream y destruir procesos.

Una vez hecho esto podemos empezar con el main de nuestra aplicación. Pediremos al usuario que escoja que hacer: ver máquinas virtuales o crearlas.

Para ver máquinas virtuales, crearemos un proceso pasándole por parámetro el comando para ver máquinas virtuales de VirtualBox. Después «escucharemos» e imprimiremos la salida por pantalla.

Para crear máquinas sería parecido, solo que cambiando el comando: » list vms » por los comandos «create -name nombreMaquina -register «(Para darle nombre a la maquina), » modifyvm nombreMaquina –ostype nombreSistemaOperativo » y «modifyvm nombreMaquina –memory cantidadDeMemoria»

La aplicación completa podéis encontrarla en mi Github, en la página: PSP_Procesos_VirtualBox.

Tenéis mas ejemplos en PSP_ProcesosCompilador y en PSP_ProcesosHahsImagenes.

Deja un comentario

Diseña un sitio como este con WordPress.com
Comenzar