Exiting a shell script if certain child processes exit Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Exiting a shell script if certain child processes exit without wasting too much if your time.

The question is published on by Tutorial Guruji team.

I have a Bash script that starts one web server, does some work, and then starts a second web server. I would like the script to exit, and for both of these servers to be terminated, if either server exits or the user types Ctrl+C.

What I have now looks like this:

start_server_1 &

trap "kill $server_1_pid" EXIT

# ...do some work that requires server 1 to be running...

start_server_2 || exit $?

This correctly shuts down both servers if the user types Ctrl+C. If Server 1 exits, however, then Server 2 and the script itself continue to run. How can I make sure that both servers and the script will be taken down if one of these processes exits?


Run both processes in the background, then wait -n to wait for one of them to exit.

Bash doesn’t report back which process exited, but you can run jobs -p to get the list of background jobs that are still running and kill them.

start_server_1 &
start_server_2 &
wait -n
kill $(jobs -p)

wait -n is new in bash 4.3. In older versions, doing this is much more difficult.

Other common shells don’t have wait -n, but they instead let you set a trap on SIGCHLD and call plain wait. In dash, ksh93, mksh and zsh, you can write

trap 'kill $server_1_pid $server_2_pid; exit' CHLD

This doesn’t work in bash because there the SIGCHLD trap is only invoked after all jobs have finished running.

We are here to answer your question about Exiting a shell script if certain child processes exit - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji