Creación de procesos

Programación multiproceso (plataforma Moodle)

Programación multiproceso (oscarmaestre)

Creación de procesos.

(Instalación de Java en Ubuntu o Linux Mint)

En Java es posible crear procesos utilizando algunas clases que el entorno ofrece para esta tarea. En este tema, veremos en profundidad la clase ProcessBuilder.

El ejemplo siguiente muestra como lanzar un proceso de Acrobat Reader:

public class LanzadorProcesos {
        public void ejecutar(String ruta){

                ProcessBuilder pb;
                try {
                        pb = new ProcessBuilder(ruta);
                        pb.start();
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }
        /**
         * @param args
         */
        public static void main(String[] args) {
                String ruta=
                        "C:\\Program Files (x86)\\Adobe\\Reader 11.0\\Reader\\AcroRd32.exe";
                LanzadorProcesos lp = new LanzadorProcesos();
                lp.ejecutar(ruta);
                System.out.println("Finalizado");
        }

}

Creación de procesos en Linux.

public class LanzadorProcesosLinux {
        public void ejecutar(String ruta){

                ProcessBuilder pb;
                try {
                        pb = new ProcessBuilder(ruta);
                        pb.start();
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }
        /**
         * @param args
         */
        public static void main(String[] args) {
        
                // Añadir la ruta de algún ejecutable en Linux
                String ruta= "";
 
                LanzadorProcesos lp =new LanzadorProcesos();
                lp.ejecutar(ruta);
                System.out.println("Finalizado");
        }

}

Ejecución del código:

javac LanzadorProcesosLinux.java
 
java LanzadorProcesosLinux

 

Cómo ejecutar un proceso del sistema con Java

Crear un programa Java para conocer el tiempo que un sistema GNU/Linux lleva arrancado. Primero se crea el proceso, se espera a que termine y se obtiene su código de salida, se obtiene la salida del proceso (entrada para el programa), se procesa el resultado y se imprimen los segundos que lleva el sistema iniciado.

¿Código?
Más información:

Documentación de ProcessBuilder

Documentación de Process

¿Cómo usar ProcessBuilder en Java?

Ejercicio: crear un programa con el código siguiente y ejecutarlo

// en linux
final String commands[] = {"ls", "/"}; // estos son los comandos a ejecutar, seria: 
                                      // usuario@usuario-pc:~$ ls /

Process process = new ProcessBuilder(commands).start(); // se crea el proceso
                                                       // usando los comandos


// ProcessBuilder.directory(new File("ruta")); donde ruta = la carpeta del ejecutable

// Se lee la salida
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

String line;
while ((line = br.readLine()) != null) {
  System.out.println(line);
}

// Esperamos que el proceso termine
try {
  int exitValue = process.waitFor();
  System.out.println("\nCódigo de salida: "+ exitValue);
} catch (InterruptedException e) {
  e.printStackTrace(System.err);
}

Supongamos que necesitamos crear un programa que aproveche al máximo el número de CPUs para realizar alguna tarea intensiva. Supongamos que dicha tarea consiste en sumar números.

Enunciado: crear una clase Java que sea capaz de sumar todos los números comprendidos entre dos valores incluyendo ambos valores.

Para resolverlo crearemos una clase Sumador que tenga un método que acepte dos números n1 y n2 y que devuelva la suma de todo el intervalo entre ellos.

Además, incluiremos un método main que ejecute la operación de suma tomando los números de la línea de comandos (es decir, se pasan como argumentos al main).

El código de dicha clase podría ser algo así:

public class Sumador {
    public static int sumar(int n1, int n2){

        int resultado = 0;
        for (int i = n1; i <= n2; i ++){
            resultado = resultado + i;
        }
        return resultado;
    }
    public static void main(String[] args){

        int n1 = Integer.parseInt(args[0]);
        int n2 = Integer.parseInt(args[1]);
        int resultado = sumar(n1, n2);
        System.out.println(resultado);
    }
}

Ejecución del código:

javac Sumador.java

java Sumador

java Sumador 1 100
Mejora: comprobar si hay parámetros y son correctos.

Modificando los argumentos del programa

Para ejecutar este programa desde dentro de Eclipse es necesario indicar que deseamos enviar argumentos al programa. Por ejemplo, si deseamos sumar los números del 2 al 10, deberemos ir a la venta «Run configuration» y en la pestaña «Arguments» indicar los argumentos (que en este caso son los dos números a indicar).

Para ejecutar el programa dentro de Intellij Idea modificamos los argumentos del programa:

Deja una respuesta