Bash – Stop/kill a process from the command line after a certain amount of time

bashkillprocesspythonshell-script

I have a Python code which listens and detects environmental sounds. It is not my project, I found it on web (SoPaRe). With the ./sopare.py -l command, it starts recording sounds but in infinite loop. When I want to stop it, I have to press Ctrl+C.

My purpose is to stop this program automatically after 10 seconds, but when I talked with the author he said that the program does not have a time limiter.

I tried to kill it via kill PID, but PID changes every time when program runs. How can stop it after a time interval via bash?

Alternatively, I can execute this command from python with os.system() command.

Best Answer

The simplest solution would be to use timeout from the collection of GNU coreutils (probably installed by default on most Linux systems):

timeout 10 ./sopare.py -l

See the manual for this utility for further options (man timeout). On non-GNU systems, this utility may be installed as gtimeout if GNU coreutils is installed at all.

Another alternative, if GNU coreutils is not available, is to start the process in the background and wait for 10 seconds before sending it a termination signal:

./sopare.py -l &
sleep 10
kill "$!"

$! will be the process ID of the most recently started background process, in this case of your Python script.

In case the waiting time is used for other things:

./sopare.py -l & pid=$!
# whatever code here, as long as it doesn't change the pid variable
kill "$pid"
Related Question