Package es.caib.seycon.util
Class TimedProcess
- java.lang.Object
-
- es.caib.seycon.util.TimedProcess
-
public class TimedProcess extends Object
Proceso de sistema operativo con tiempo máximo de ejecución. Se ejecutan simultáneamente el proceso de sistema operativo y tres threads:- thread timeout: cancelará el proceso si transcurrido el tiempo máximo de ejecución, éste no ha finalizado
- consumidor de salida estándar: lee la salida estándar del proceso y la almacena en memoria
- consumidor de error estándra: lee el error estándar del proceso y lo almacena en memoria
- proceso de sistema operativo: ejecuta el proceso indicado en el método exec (sincrónamente) o execNoWait (asíncronamente)
Los threads consumidores son opcionales en las llamadas asíncronas y automáticos en la llamada síncrona.
Para realizar una llamada síncrona, la clase invocante ejecutará:
Process p = new Process ( 10000 ); // 10 segundos de timpo límite
try {
int result = p.exec ("/usr/ucb/whoami"); // Proceso de sistema operativo
} catch (TimedOutExceptin e) {
...
}
Para realizar una llamada asíncrona, la clase invocante ejecutará:
Process p = new Process ( 10000 ); // 10 segundos de timpo límite
try {
int result = p.execNoWait ("/usr/ucb/whoami"); // Proceso de sistema operativo
p.consumeOutput (); // (opcionalmente) se instanciará el thread consumidor de la salida estándar
p.consumeError (); // (opcionalmente) se instanciará el thread consumidor del error estándar
p.getInputStream (); // (opcionalmente) se usará la entrada estándar
...
p.join (); // Esperar a la finalización ( o timeout ) del proceso
} catch (TimedOutExceptin e) {
...
}- Version:
- $Revision: 1.1.2.2 $
- Author:
- $Author: u07286 $
-
-
Constructor Summary
Constructors Constructor Description TimedProcess(long timeout)
Construir un nuevo TimedProcess
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
consumeError()
Instancia y arranca el thread que leerá y almacenará el error estándarvoid
consumeOutput()
Instancia y arranca el thread que leerá y almacenará la salida estándarint
exec(String command)
Ejecutar el proceso de forma síncrona.int
exec(String[] command)
Ejecutar el proceso de forma síncrona.void
execNoWait(String command)
Ejecutar el proceso de forma asíncrona.void
execNoWait(String[] command)
Ejecutar el proceso de forma asíncrona.String[]
getEnvironment()
String
getError()
Obtener el error estándar del proceso.InputStream
getErrorStream()
Alternativamente al método consumeError, el usuario puede obtener el error estándar del proceso y tratarlo de forma alternativa.OutputStream
getInputStream()
El usuario puede obtener la entrada estándar del proceso para comunicarse con él.String
getOutput()
Obtener la salida estándar del proceso.InputStream
getOutputStream()
Alternativamente al método consumeOutput, el usuario puede obtener la salida estándar del proceso y tratarla de forma alternativa.int
join()
Espera a la finalización del proceso que se arrancó mediante execNoWaitvoid
setEnvironment(String[] environment)
-
-
-
Method Detail
-
consumeOutput
public void consumeOutput()
Instancia y arranca el thread que leerá y almacenará la salida estándar
-
consumeError
public void consumeError()
Instancia y arranca el thread que leerá y almacenará el error estándar
-
getOutputStream
public InputStream getOutputStream()
Alternativamente al método consumeOutput, el usuario puede obtener la salida estándar del proceso y tratarla de forma alternativa. Su uso se recomienda en el caso de procesos que generen un gran cantidad de salida estandar- Returns:
- corriente de entrada que conecta con la salida estándar del proceso
-
getErrorStream
public InputStream getErrorStream()
Alternativamente al método consumeError, el usuario puede obtener el error estándar del proceso y tratarlo de forma alternativa. Su uso se recomienda en el caso de procesos que generen un gran cantidad de error estándar- Returns:
- corriente de entrada que conecta con el error estándar del proceso
-
getInputStream
public OutputStream getInputStream()
El usuario puede obtener la entrada estándar del proceso para comunicarse con él.- Returns:
- corriente de salida que conecta con la entrada estándar del proceso
-
execNoWait
public void execNoWait(String command) throws IOException
Ejecutar el proceso de forma asíncrona. La llamada finaliza de forma casi inmediata y el proceso se inicia de fondo.- Parameters:
command
- proceso de sistema operativo a ejecutar- Throws:
IOException
- error ejecutando el proceso.
-
getEnvironment
public String[] getEnvironment()
-
setEnvironment
public void setEnvironment(String[] environment)
-
execNoWait
public void execNoWait(String[] command) throws IOException
Ejecutar el proceso de forma asíncrona. La llamada finaliza de forma casi inmediata y el proceso se inicia de fondo.- Parameters:
command
- proceso (con parámetros) de sistema operativo a ejecutar- Throws:
IOException
- error ejecutando el proceso.
-
join
public int join() throws TimedOutException
Espera a la finalización del proceso que se arrancó mediante execNoWait- Returns:
- código de error del proceso
- Throws:
TimedOutException
- el proceso no ha finalizado en el tiempo definido
-
exec
public int exec(String command) throws IOException, TimedOutException
Ejecutar el proceso de forma síncrona. La llamada finalizará cuando el proceso haya finalizado, o bien haya sido cancelado por expiración del tiempo asignado- Parameters:
command
- proceso de sistema operativo a ejecutar- Throws:
TimedOutException
- el proceso no ha finalizado en el tiempo definidoIOException
- error ejecutando el proceso.
-
exec
public int exec(String[] command) throws IOException, TimedOutException
Ejecutar el proceso de forma síncrona. La llamada finalizará cuando el proceso haya finalizado, o bien haya sido cancelado por expiración del tiempo asignado- Parameters:
command
- proceso (con parámetros) de sistema operativo a ejecutar- Throws:
TimedOutException
- el proceso no ha finalizado en el tiempo definidoIOException
- error ejecutando el proceso.
-
getOutput
public String getOutput()
Obtener la salida estándar del proceso. Para su uso es necesario haber usado la forma sincrona o bien haber invocado el método consumeOutput tras la llamad asíncrona- Returns:
- salida estandar del proceso
-
getError
public String getError()
Obtener el error estándar del proceso. Para su uso es necesario haber usado la forma sincrona o bien haber invocado el método consumeError tras la llamad asíncrona- Returns:
- error estandar del proceso
-
-