Handling Background Processes in Bash
Published on
Updated on
For multi-process applications, I want to be able to start it up using the bash
command processor and be able to stop all the processes just by hitting CTRL-C
.
As a quick reminder, to have a task run in the background you need to add a &
at the end of the line.
execute_app &
Previously, I was grabbing the PID of this background process, trapping the interrupt signal and taking the time to send the interrupt signal to all of the background processes.
You can get the child pid by referencing the variable $!
after sending a process to the background.
Now I just use setsid
to set the process group of the background processes to be the same as the bash process itself. The following demo script here will show the capability.
#!/bin/bash
setsid sleep 5 &
setsid sleep 10 &
wait
This script will send two processes to the background and will wait until all the processes are finished. Hitting CTRL-C
during execution will send the interrupt signal to all of the processes achieving my goal.