Cómo ejecutar la aplicación durante un tiempo establecido en shell

12

Si y cómo es posible, dentro Terminal, hacer que una aplicación se ejecute durante 30 segundos, antes de que se cierre a la fuerza y ​​se haga eco de los registros de ese proceso.

ir-g
fuente
@JacobVlijm Idealmente se ejecutaría como un script de shell debido a la portabilidad del lenguaje, principalmente porque el área de uso prevista es un servicio de CI.
ir-g
1
@ ir-g puede usar el comando de tiempo de espera . Por ejemplo, el comando timeout 30s
mcantsen

Respuestas:

19

Es posible que desee utilizar el comando de tiempo de espera .

timeout -k 10s 30s command

que ejecutará el comando durante 30 segundos y lo matará después de 10 segundos si aún se está ejecutando. - Consulte la página de manual para más opciones.

mcantsin
fuente
1
@ ir-g de nada. También puede consultar el comando watch , que es similar y también muy fácil de usar en la línea de comandos.
mcantsin
2
Gracias por ese puntero, watchme parece un comando muy interesante. Podría ser útil ...
ir-g
3

Aquí hay dos formas (pero el timeoutcomando sugerido por mcantsin es probablemente mejor):

  1. Inicie el comando en segundo plano, de esa manera su PID se guarda $!y puede usarlo para matarlo después del tiempo especificado:

    command &
    sleep 30 && kill $!
  2. Inicie el comando y use pkillo killallpara matarlo. PRECAUCIÓN: Esto supone que solo se está ejecutando un comando con ese nombre, estoy usando firefoxcomo ejemplo:

    firefox &
    sleep 30 && pkill firefox

No tengo idea de lo que quiere decir con "los registros de ese proceso", pero el error estándar de un proceso se puede guardar en un archivo con command 2> logfile.txt.

terdon
fuente