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"; LanzadorProcesosLinux lp = new LanzadorProcesosLinux(); 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); } }
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
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
Lo siento, debes estar conectado para publicar un comentario.