Search code examples
bashshellprocessforkkill

How to kill all subprocesses of shell?


I'm writing a bash script, which does several things.

In the beginning it starts several monitor scripts, each of them runs some other tools.

At the end of my main script, I would like to kill all things that were spawned from my shell.

So, it might looks like this:

#!/bin/bash

some_monitor1.sh &
some_monitor2.sh &
some_monitor3.sh &

do_some_work
...

kill_subprocesses

The thing is that most of these monitors spawn their own subprocesses, so doing (for example): killall some_monitor1.sh will not always help.

Any other way to handle this situation?


Solution

  • After starting each child process, you can get its id with

    ID=$!
    

    Then you can use the stored PIDs to find and kill all grandchild etc. processes as described here or here.