timeoutcmd 359 B

12345678910111213141516171819202122232425262728
  1. #!/bin/bash
  2. set -m
  3. timeout=$1
  4. shift
  5. cmd=$@
  6. echo "timeout: ${timeout}"
  7. echo "cmd : ${cmd}"
  8. eval "${cmd}" &
  9. cmdpid=$!
  10. stopit()
  11. {
  12. echo "TIMEOUT: ${cmd} took > ${timeout} seconds"
  13. echo "sending SIGINT"
  14. echo kill -INT -- -$cmdpid
  15. kill -INT -- -$cmdpid;
  16. }
  17. ( sleep ${timeout} ; stopit; ) &
  18. timeoutpid=$!
  19. wait $cmdpid
  20. kill $timeoutpid >& /dev/null