Package com.soffid.iam.util
Class TimedProcess
java.lang.Object
com.soffid.iam.util.TimedProcess
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á:
Para realizar una llamada asíncrona, la clase invocante ejecutará:
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 $
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidInstancia y arranca el thread que leerá y almacenará el error estándarvoidInstancia y arranca el thread que leerá y almacenará la salida estándarintEjecutar el proceso de forma síncrona.intEjecutar 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[]getError()Obtener el error estándar del proceso.Alternativamente al método consumeError, el usuario puede obtener el error estándar del proceso y tratarlo de forma alternativa.El usuario puede obtener la entrada estándar del proceso para comunicarse con él.Obtener la salida estándar del proceso.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)
-
Field Details
-
output
contenido de la salida estándar -
error
contenido del error estándar
-
-
Constructor Details
-
TimedProcess
public TimedProcess(long timeout) Construir un nuevo TimedProcess- Parameters:
timeout- tiempo máximo de ejecución (en milisegundos)
-
-
Method Details
-
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
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
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
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
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
-
setEnvironment
-
execNoWait
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
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
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
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
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
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
-