web-dev-qa-db-fra.com

Comment exécuter un processus avec un délai d'expiration dans Bash?

Duplicate possible:
script Bash qui tue un processus enfant après un délai donné

Existe-t-il un moyen d'écrire un script Shell pour exécuter une commande donnée pendant 15 secondes, puis de supprimer la commande?

J'ai essayé de dormir, d'attendre et de cingler, mais peut-être que je les utilise mal.

109
AlanF

Utilisez la commande timeout:

timeout 15s command

Remarque: sur certains systèmes, vous devez installer coreutils, sur d’autres, il manque ou a des arguments de ligne de commande différents. Voir une solution alternative publiée par @ArjunShankar. Sur cette base, vous pouvez encapsuler ce code de plaque chauffante et créer votre propre script portable timeout ou votre petite application C qui fait la même chose.

220
Karoly Horvath

Certaines machines n'ont pas timeout installé/disponible. Dans ce cas, vous pouvez utiliser le processus en arrière-plan. son PID est alors enregistré en tant que $!; puis dormez pendant le temps requis, puis tuez-le:

some_command arg1 arg2 &
TASK_PID=$!
sleep 15
kill $TASK_PID

À cette URL je trouve qu'il est mentionné plus d'une solution pour y arriver.

56
ArjunShankar