14

If and How is it possible to, in Terminal, to get an application to run for 30 seconds, before being force closed, and echoing the logs of that process?

Braiam
  • 69,302
ir-g
  • 1,274
  • @JacobVlijm It would ideally run as a shell script due to the portability of the language, mainly as the intended area of usage is a CI service. – ir-g Apr 27 '14 at 14:18
  • 1
    @ir-g you can use the timeout command. e.g. timeout 30s command – mcantsin Apr 27 '14 at 14:21

2 Answers2

21

You might want to use the timeout command.

timeout -k 10s 30s command

which will run the command for 30s and kill it after 10s if still running. - Check the manpage for more options.

mcantsin
  • 1,264
  • 1
    @ir-g you're welcome. You might also want to check out the watch command, which is similar and also very easy to use in the command line. – mcantsin Apr 27 '14 at 14:47
  • 2
    Thanks for that pointer, watch strikes me as a very interesting command. Could come in handy... – ir-g Apr 27 '14 at 15:03
3

Here are two ways (but the timeout command suggested by mcantsin is probably better):

  1. Launch the command in the background, that way its PID is saved in $! and you can use that to kill it after the specified time:

    command &
    sleep 30 && kill $!
    
  2. Launch the command and use pkill or killall to kill it. CAUTION: This assumes that only one command with that name is running, I am using firefox as an example:

    firefox &
    sleep 30 && pkill firefox
    

I have no idea what you mean by "the logs of that process" but a process's standard error can be saved to a file with command 2> logfile.txt.

terdon
  • 104,404