2012-04-19 13 views
95

Duplicar posible:
Bash script that kills a child process after a given timeout¿Cómo ejecutar un proceso con un tiempo de espera en Bash?

¿Hay una manera de escribir un script de shell que ejecutar un determinado comando durante 15 segundos, y luego matar el comando?

He intentado dormir, esperar y hacer ping pero quizás los estoy usando incorrectamente.

+2

Por lo general, usted usa una señal de ALARMA y la atrapa. Pero la utilidad de comando [timelimit] (http://devel.ringlet.net/sysutils/timelimit/) parece prometedora. – Konerak

+0

¿Quién vota esto como offtópico? :/ –

Respuesta

43

Puede hacer el fondo del proceso, y su PID entra en $!. A continuación, el sueño y la muerte:

some_command some_arg1 some_arg2 & 
TASK_PID=$! 
sleep 15 
kill $TASK_PID 

En this URL encuentro que se mencionan, más de uno soluciones para que esto suceda.

+3

Inicialmente borré mi respuesta (porque, claramente, la de Karoly es mucho más asombrosa), pero parece que algunas personas no tienen 'timeout' => sin recuperar. – ArjunShankar

190

utilizar el comando timeout:

timeout 15s command 

Nota: en algunos sistemas que necesita para instalar coreutils, en los demás que le falta o tiene diferentes argumentos de línea de comandos. Vea una solución alternativa publicada por @ArjunShankar. Basado en él, puede encapsular el código de la placa de la caldera y crear su propio script portátil timeout o una pequeña aplicación C que hace lo mismo.

+3

sin mencionar que volverá instantáneamente si el comando finalizó anteriormente –

+0

Entonces, para el comando Estoy tratando de matar después de 15 segundos He intentado usar este comando pero no detuvo el comando de ejecución, también he intentado usar timeout - k 15 y eso tampoco funcionó :( – AlanF

+0

así es como ** ejecutas ** el comando. –

Cuestiones relacionadas