Creación de procesos

Programación multiproceso (plataforma Moodle)

Programación multiproceso en oscarmaestre.github.io

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) {

                // Usar la calculadora                
                String ruta="/usr/bin/gnome-calculator";

                // copiar gnome-calculator a la carpeta del programa java             
                // String ruta="./gnome-calculator";

                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.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

public class TiempoLinux {

    public static void main(String[] args) throws Exception {
        // Iniciar el proceso
        ProcessBuilder builder = new ProcessBuilder().command("cat", "/proc/uptime");
        Process process = builder.start();

        // Alternativa a ProcessBuilder
        //Process process = Runtime.getRuntime().exec(new String[] { "cat", "/proc/uptime" });

        // Esperar a que termine el proceso y obtener su valor de salida
        process.waitFor(10, TimeUnit.SECONDS);
        int value = process.exitValue();
        if (value != 0) {
            throw new Exception(MessageFormat.format("Código de salida con error (%d)", value));
        }

        // Obtener la salida del proceso
        BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), "UTF-8"));
        String result = br.lines().collect(Collectors.joining("\n"));
        br.close();
        
        // Obtener el tiempo desde el inicio del sistema 
        String seconds = result.split(" ")[0];
        System.out.printf("Segundos desde el inicio del sistema: %.2f", new BigDecimal(seconds));
        System.out.printf("Minutos desde el inicio del sistema: %.2f", Double.parseDouble(seconds)/ 60);
    }
}
Más información:

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