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 voidconsumeError()Instancia y arranca el thread que leerá y almacenará el error estándarvoidconsumeOutput()Instancia y arranca el thread que leerá y almacenará la salida estándarintexec(String command)Ejecutar el proceso de forma síncrona.intexec(String[] command)Ejecutar el proceso de forma síncrona.voidexecNoWait(String command)Ejecutar el proceso de forma asíncrona.voidexecNoWait(String[] command)Ejecutar el proceso de forma asíncrona.String[]getEnvironment()StringgetError()Obtener el error estándar del proceso.InputStreamgetErrorStream()Alternativamente al método consumeError, el usuario puede obtener el error estándar del proceso y tratarlo de forma alternativa.OutputStreamgetInputStream()El usuario puede obtener la entrada estándar del proceso para comunicarse con él.StringgetOutput()Obtener la salida estándar del proceso.InputStreamgetOutputStream()Alternativamente al método consumeOutput, el usuario puede obtener la salida estándar del proceso y tratarla de forma alternativa.intjoin()Espera a la finalización del proceso que se arrancó mediante execNoWaitvoidsetEnvironment(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 TimedOutExceptionEspera 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
-
-