Foro de elhacker.net

Programación => Java => Mensaje iniciado por: rubcr en 18 Noviembre 2020, 11:36 am



Título: Procesos
Publicado por: rubcr en 18 Noviembre 2020, 11:36 am
Hola buenas.
Me ha surgido una duda de como programar procesos en java.
Poniendo un ejemplo, ¿como se podría crear un proceso que ejerza como proceso padre y pida una frase por teclado y uno que ejerza como hijo y haga algo con esa frase como invertirla y la muestre?
He visto mucha documentación y no me llega a quedar claro.
Espero que alguien me ayude.
Un saludo.


Título: Re: Procesos
Publicado por: MCKSys Argentina en 18 Noviembre 2020, 12:08 pm
Hola!

La respuesta que dí en este post puede ayudarte: https://foro.elhacker.net/java/programacion_de_procesos-t507778.0.html (https://foro.elhacker.net/java/programacion_de_procesos-t507778.0.html)

Saludos!


Título: Re: Procesos
Publicado por: rubcr en 18 Noviembre 2020, 12:17 pm
Hola!

La respuesta que dí en este post puede ayudarte: https://foro.elhacker.net/java/programacion_de_procesos-t507778.0.html (https://foro.elhacker.net/java/programacion_de_procesos-t507778.0.html)

Saludos!
Gracias por contestar y por tu aportación.  Me podrías ayudar con la sintaxis del programa, porque no me queda nada claro como implementarlo, entiendo lo que se expone pero no sé como aplicarlo en java


Título: Re: Procesos
Publicado por: MCKSys Argentina en 18 Noviembre 2020, 12:55 pm
Gracias por contestar y por tu aportación.  Me podrías ayudar con la sintaxis del programa, porque no me queda nada claro como implementarlo, entiendo lo que se expone pero no sé como aplicarlo en java

Hola!

Has revisado las opciones del post en Stack Overflow? Hay varias. Dependiendo de la que elijas/prefieras, cada una tiene link con referencias a códigos de ejemplo de cómo implementar dichas opciones.

Saludos!

EDIT: De todas formas no soy programador Java per-se. Seguramente otros pueden darte algo más consiso.


Título: Re: Procesos
Publicado por: K-YreX en 19 Noviembre 2020, 06:41 am
Hola buenas.
Me ha surgido una duda de como programar procesos en java.
Poniendo un ejemplo, ¿como se podría crear un proceso que ejerza como proceso padre y pida una frase por teclado y uno que ejerza como hijo y haga algo con esa frase como invertirla y la muestre?
He visto mucha documentación y no me llega a quedar claro.
Espero que alguien me ayude.
Un saludo.
El funcionamiento es mucho más sencillo de lo que parece. A continuación te explico los pasos de lo que tienes que hacer:
PD: No te voy a dar el programa hecho. Solo te voy a dar un ejemplo de conexión de procesos en Java (que no es poco) y tú tendrás que hacer el resto.

  • Crear las dos clases ejecutables de manera independiente. Ambas clases deben tener su método main() y la clase hija (independiente) debe poder ejecutarse por si sola y funcionar correctamente. Esta última la vamos a crear con un BufferedReader para obtener los datos de la entrada estándar:
Código
  1. public class Independent {
  2.  public static void main(String[] args) {
  3.    try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { // try-with-resources para cerrar automaticamente el br
  4.      System.out.println("Introduce un numero: ");
  5.      int numero = Integer.parseInt(br.readLine());
  6.      System.out.println(numero * 2);
  7.    } catch(Exception e) {}
  8.  }
  9. }

Ahora tienes que hacer una clase dependiente que lo que hará será ejecutar la clase independiente y mandarle la entrada como si la hubiésemos introducido directamente desde el teclado, después recibirá su salida y la mostrará:
Código
  1. public class Dependent {
  2.  public static void main(String[] args){
  3.    ProcessBuilder pb = new ProcessBuilder("java", "Independent"); // comando para lanzar la otra clase como si se hiciese desde linea de comandos
  4.    try {
  5.      Process p = pb.start(); // iniciamos el proceso
  6.      OutputStream os = p.getOutputStream(); // redireccionamos su ENTRADA a os. Se utiliza output porque se entiende que es la salida del padre
  7.      BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); // redireccionamos su SALIDA (que es la entrada para el padre)
  8.      os.write((4 + "\n").getBytes()); // Simulamos que hemos introducido un 4 por teclado y le hemos dado al enter
  9.      os.flush(); // hacemos que los bytes anteriores se escriban en el flujo. Si no hacemos esto se quedaran en un buffer temporal y no continuara
  10.      // Ahora el programa hijo que ha sido lanzado hace un rato acaba de recibir el flujo anterior como si lo hubiesemos introducido por teclado
  11.      // Ahora "ha mostrado" el resultado (8). Tenemos que recoger su salida mediante br:
  12.      br.readLine(); // Leemos la primera linea de su salida que no interesa (porque es: "Introduce un numero: \n")
  13.      int doble = Integer.parseInt(br.readLine()); // Guardamos el 8 que se habria mostrado por pantalla
  14.      System.out.println("El resultado es: " + doble);
  15.    } catch(Exception e){}
  16.    // ...ahora habria que cerrar flujos y demas...
  17.  }
  18. }

  • Si trabajas desde un IDE es posible que tengas problemas con la instanciación del ProcessBuilder pues tendrás que utilizar un comando de ejecución algo más complejo.
  • Si trabajas en Windows y tu IDE está configurado en UTF-8 tendrás que añadir la codificación a la instrucción.

A partir de aquí te toca continuar a ti y si tienes algún otro problema siempre puedes preguntar pero adjunta lo que tengas hecho. :-X


Título: Re: Procesos
Publicado por: rub'n en 19 Noviembre 2020, 18:05 pm
tal cual, como dicen, y aqui mismo en el foro, hay temas bastante sobre como ejecutar procesos bash con java.