Class TimedProcess

java.lang.Object
com.soffid.iam.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 $
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected String
    contenido del error estándar
    protected String
    contenido de la salida estándar
  • Constructor Summary

    Constructors
    Constructor
    Description
    TimedProcess(long timeout)
    Construir un nuevo TimedProcess
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Instancia y arranca el thread que leerá y almacenará el error estándar
    void
    Instancia y arranca el thread que leerá y almacenará la salida estándar
    int
    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.
     
    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.
    int
    Espera a la finalización del proceso que se arrancó mediante execNoWait
    void
    setEnvironment(String[] environment)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • output

      protected String output
      contenido de la salida estándar
    • error

      protected String 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

      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 definido
      IOException - 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 definido
      IOException - 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