0% encontró este documento útil (0 votos)
85 vistas

01 - Creación de Procesos en Java 1

El documento describe las clases Process y Runtime en Java que permiten la creación y gestión de procesos. Runtime proporciona métodos como getRuntime() para obtener la instancia de Runtime asociada a la aplicación y exec() para ejecutar un comando en un nuevo proceso. La clase Process representa un proceso en ejecución y ofrece métodos como getInputStream(), getErrorStream() y getOutputStream() para interactuar con la entrada, salida y errores del proceso. Los ejemplos muestran cómo ejecutar aplicaciones externas, leer su salida y errores,

Cargado por

chisen
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
85 vistas

01 - Creación de Procesos en Java 1

El documento describe las clases Process y Runtime en Java que permiten la creación y gestión de procesos. Runtime proporciona métodos como getRuntime() para obtener la instancia de Runtime asociada a la aplicación y exec() para ejecutar un comando en un nuevo proceso. La clase Process representa un proceso en ejecución y ofrece métodos como getInputStream(), getErrorStream() y getOutputStream() para interactuar con la entrada, salida y errores del proceso. Los ejemplos muestran cómo ejecutar aplicaciones externas, leer su salida y errores,

Cargado por

chisen
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 40

Programación

multiproceso
Creación de procesos en
Java 1
Process y Runtime
Java dispone de varias clases para la gestión
de procesos.
Cada aplicación dispone de una instancia
Runtime que representa entorno de la
aplicación. Clase Runtime
Aplicación

¿Qué métodos tiene


Runtime?
Clase runtime: Process y Runtime
Clase runtime 2 métodos importantes:
● static Runtime getRuntime() devuelve objeto Runtime
asociado a la aplicación en curso.
● Process exec(String comando) ejecuta la orden
especificada en comando en un proceso separado.
Devuelve objeto process que se puede utilizar para
controlar interacción del programa java con el nuevo
proceso.
Process y Runtime
Realizamos proceso de programa ejecute una
aplicación, para probar los métodos descritos.

Instalación compilador Java Windows Instalación compilador Java Linux

Instalar jdk Java. Enlace.

ejemplos diapositivas realizados con Windows


Ejemplo1
Muestra como ejecutar una aplicación
Windows, en este caso Notepad.
Ejemplo: ejecutar notepad
public class Ejemplo1{
obtengo objeto Runtime
public static void main(String[] args) {
Runtime r=Runtime.getRuntime();
String comando="notepad"; //en linuX sustituir por comando linux
Process p;
Vble tipo proceso

try{
Ejecuto comando
p=r.exec(comando);
} catch(Exception e) {
System.out.println ("Error en "+comando); compilo y ejecuto
e.printStackTrace();
}
}

}//Ejemplo1
Ejemplo: ejecutar notepad
¿Qué ocurre con comandos Windows o Linux
no tienen ejecutable?
→ Utilizamos cmd /c dir(windows) o ls(linux)
windows →
modifico en Ejemplo1 string comando=”CMD /C /DIR”

No obtengo salida
¿POR QUÉ?
Clase Process
Para leer salida necesitamos usar el objeto
process, que se obtenia de esta forma
Clase Process
Clase process posee el método
getInputStream() que nos permite leer el
stream de salida del proceso, es decir lo que el
comando escribió en la consola de salida.
Vamos a verlo como se implementaria →
Process . Guardar stream salida
p=r.exec(comando); ejecuto comando

InputStream is=p.getInputStream(); guardo stream salida en vle is


de tipo InputStream

BufferedReader br=new BufferedReader(new InputStreamReader (is));

guardo en vlble br de tipo BufferedReader para luego


sacar linea a linea
Process. Mostrar stream salida
String linea;
while ((linea=br.readLine())!=null) //lee una línea
System.out.println(linea);

Lee línea a línea de br y va mostrando


con System.out.println(linea)
Process. Mostrar stream salida
Mientras se ejecuta subproceso (cmd /c
dir)tengo que hacer proceso actual espere.
Método waitFor() hace que el proceso actual
espere hasta que el subproceso representado
por el Process finalice.
Devuelve 0 si ha finalizado correctamente.
Ejemplo2
Ejemplo2. Código editable.
import java.io.*;
//comprobación de error 0 bien - 1 mal
public class Ejemplo2{
int exitVal;
public static void main(String[] args) {
Runtime r=Runtime.getRuntime(); try {
String comando="cmd /c dir"; exitVal=p.waitFor();
Process p=null; System.out.println("Valor de salida "+exitVal);
try{ } catch(InterruptedException e){
p=r.exec(comando);
e.printStackTrace();
InputStream is=p.getInputStream();
}
BufferedReader br=new BufferedReader(new
InputStreamReader (is)); }
String linea;
while ((linea=br.readLine())!=null)//lee una linea
}//Ejemplo2
System.out.println(linea);
br.close();
} catch(Exception e) {
System.out.println ("Error en "+comando);
e.printStackTrace();
}
Actividad Casibash
Realiza un programa Java usando Runtime y
Process que reciba desde la línea de
comandos un nombre de comando y lo ejecute.
Process. getErrorStream()
¿Qué ocurre si se produce error al lanzar el
proceso?
Process posee el método getErrorStream() que
obtiene el stream con los posibles errores.
Process. getErrorStream()
Método getErrorStream().
Nos permite leer posibles errores se produzcan
al lanzar el proceso.
Edita el ejemplo2.java y modifica el comando
por “cmd /c dir” o “ls” para provocar error.
La salida es
Process. getErrorStream()
Si añadimos el siguiente código a ejemplo2:
stream de errores de process

guardo en buffer y leo


línea a línea
Process. getErrorStream()
Modifico la orden para provocar error

Obtenemos la siguiente salida:


Redireccionando a ficheros
Vamos a ver si es posible redireccionar la
salida a un fichero.
Process. FileOutPutStream y PrintWriter
Creo programa Java pinta 5 veces saludo se le introduce
por línea comandos
public class Unsaludo {
public static void main(String[] args){
if (args.length<1){
System.out.println ("Se necesita saludo...");
System.exit(1);
}
for (int i=0;i<5;i++){
System.out.println(i+1 + "."+ args[0]);
} }//fin main
} //unsaludo
Process. FileOutPutStream y PrintWriter
Creo programa Java pinta 5 veces saludo se le introduce
por línea comandos
public class Unsaludo {
public static void main(String[] args){
if (args.length<1){
System.out.println ("Se necesita saludo...");
System.exit(1);
}
for (int i=0;i<5;i++){
Se crea fichero
System.out.println(i+1 + "."+ args[0]); con salida
}
}//fin main
} //unsaludo
Process. FileOutPutStream y PrintWriter
Ahora voy a intentar llamar a unsaludo desde el programa
ejemplo2
Deberé modificar el comando e introducir unsaludo y el
redireccionado a un fichero.
Process. FileOutPutStream y PrintWriter

Cambiamos en ejemplo2 el comando y


escribimos:
String comando="java Unsaludo \"Hola Mundo!!\\">ejem.txt";

Compilamos y ejecutamos
No genera fichero salida
¿Por qué ?
Process. FileOutPutStream y PrintWriter

exec() no actúa como intérprete de comandos


o shell, sólo ejecuta programa.
Si queremos redirigir a un fichero tendremos
que añadirlo por programación mediante
clases:
● FileOutputStream
● PrintWriter
Ejemplo3. FileOutputStream y PrintWriter

Código 1/3
Ejemplo3. FileOutputStream y PrintWriter

Código 2/3
creo objeto
fileoutputstream y
printwriter

imprimo en
fichero
Ejemplo3. FileOutputStream y PrintWriter

Código 3/3
Ejemplo3. FileOutputStream y PrintWriter
Actividad tasklist
Realiza un programa que genere proceso que guarda en
un fichero de nombre procesos.txt. información de los
procesos en ejecución

Para ver servicios desde cmd ejecuta >tasklist /v


Process. getOutputStream
Vamos a ver como introducir comandos al
subproceso, es decir como escribir en el
stream de entrada.
Process. getOutputStream
Process posee método getOutputSteam() que
permite escribir en el stream de entrada del
proceso.
Es decir, pasarle los valores que nos solicitará
el proceso.
Ejemplo ejecuta Date
Ejemplo5. Windows
Vamos a implementar el Ejemplo5 que
ejecutará date y le pasará los valores
10/10/2013.
Primera parte igual que todos
los ejemplos sólo cambia el
comando
Ejemplo5
Añadimos escritura, para el
envío de datos al proceso p

lectura igual en ejemplos


anteriores
Ejemplo5

comprobación error igual en otros


ejemplos
Ejemplo 5 Linux
Modificamos comando Windows para linux
Ejecutamos comando passwd
String comando="passwd"; //comando a ejecutar
Process p=null;

os.write("simarro123\n".getBytes());
try{ os.flush(); //vacio buffer
p=r.exec(comando);
//escritura - envio entrada os.write("simarro123\n".getBytes());
OutputStream os=p.getOutputStream(); os.flush(); //vacio buffer
os.write("david123\n".getBytes());
os.flush(); //vacio buffer
Ejemplo5. Ejecución
Process. getOutputStream
Realizamos programa Java lea una cadena de
la entrada estándar EjemploLectura.java
Process. getOutputStream
Utilizando el método getOutputStream()
podemos enviar datos a la entrada estándar
EjemploLectura.
Actividad Ejemplo6
Realiza modificaciones en Ejemplo5 para que
realice lo anterior y le pase la cadena “Hola
mundo”. Guarda como Ejemplo6.java
La salida del programa debe ser

También podría gustarte