# Spawn a child process:
(dosmth) & pid=$!
# in the background, sleep for 10 secs then kill that process
(sleep 10 && kill -9 $pid) &
ou pour obtenir également les codes de sortie :
# Spawn a child process:
(dosmth) & pid=$!
# in the background, sleep for 10 secs then kill that process
(sleep 10 && kill -9 $pid) & waiter=$!
# wait on our worker process and return the exitcode
exitcode=$(wait $pid && echo $?)
# kill the waiter subshell, if it still runs
kill -9 $waiter 2>/dev/null
# 0 if we killed the waiter, cause that means the process finished before the waiter
finished_gracefully=$?
(Comme on le voit dans l'entrée 68 de la FAQ BASH :"Comment puis-je exécuter une commande et la faire abandonner (timeout) après N secondes ?")
Si cela ne vous dérange pas de télécharger quelque chose, utilisez timeout
(sudo apt-get install timeout
) et utilisez-le comme :(la plupart des systèmes l'ont déjà installé, sinon utilisez sudo apt-get install coreutils
)
timeout 10 ping www.goooooogle.com
Si vous ne voulez pas télécharger quelque chose, faites ce que le délai d'attente fait en interne :
( cmdpid=$BASHPID; (sleep 10; kill $cmdpid) & exec ping www.goooooogle.com )
Au cas où vous voudriez faire un délai d'attente pour un code bash plus long, utilisez la deuxième option en tant que telle :
( cmdpid=$BASHPID;
(sleep 10; kill $cmdpid) \
& while ! ping -w 1 www.goooooogle.com
do
echo crap;
done )