Klement Sekera | 94384e4 | 2017-07-11 07:29:37 +0200 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | rv=0 |
| 4 | |
Andrew Yourtchenko | 3efd4e9 | 2021-03-04 16:56:38 +0000 | [diff] [blame] | 5 | # Minimalist version of cleanup, used for signal handling. |
| 6 | # Sends a SIGKILL to the entire process group, including ourselves. |
| 7 | # Needs just two external commands, making it more |
| 8 | # robust in case of resource issues. |
| 9 | panic() { |
| 10 | echo "$0(pid $$): Caught a signal, emergency clean-up" |
| 11 | # use "pgid:1=" output format to get unpadded process group ID |
| 12 | group_id=`ps -p $$ -o pgid:1=` |
| 13 | echo "$0(pid $$): sending kill to process group ID:${group_id}" |
| 14 | kill -9 -- -${group_id} |
| 15 | # not reached |
| 16 | } |
| 17 | |
| 18 | # Happy camper leisurely clean up - send the signal only to other |
| 19 | # processes in the process group, and also check |
| 20 | # that the processes exists before sending the signal. |
Klement Sekera | 94384e4 | 2017-07-11 07:29:37 +0200 | [diff] [blame] | 21 | atexit() { |
| 22 | group_id=`ps -p $$ -o pgid=` |
| 23 | my_id=$$ |
| 24 | ids=`pgrep -g $group_id -d ' ' | sed "s/\b$my_id\b//g"` |
| 25 | echo "Killing possible remaining process IDs: $ids" |
| 26 | for id in $ids |
| 27 | do |
| 28 | if ps -p $id > /dev/null |
| 29 | then |
| 30 | kill -9 $id |
| 31 | fi |
| 32 | done |
Klement Sekera | 8712ada | 2017-08-16 16:38:10 +0200 | [diff] [blame] | 33 | exit ${rv} |
Klement Sekera | 94384e4 | 2017-07-11 07:29:37 +0200 | [diff] [blame] | 34 | } |
| 35 | |
Andrew Yourtchenko | 3efd4e9 | 2021-03-04 16:56:38 +0000 | [diff] [blame] | 36 | trap "panic;" SIGINT SIGTERM |
Klement Sekera | 94384e4 | 2017-07-11 07:29:37 +0200 | [diff] [blame] | 37 | |
Klement Sekera | db4e84c | 2017-08-11 10:06:15 +0200 | [diff] [blame] | 38 | FORCE_FOREGROUND=$1 |
| 39 | shift |
| 40 | |
| 41 | source $1 |
| 42 | shift |
| 43 | |
| 44 | if [[ "${FORCE_FOREGROUND}" == "1" ]] |
| 45 | then |
| 46 | $* |
| 47 | else |
| 48 | $* & |
Klement Sekera | 8712ada | 2017-08-16 16:38:10 +0200 | [diff] [blame] | 49 | pid=$! |
| 50 | wait ${pid} |
Klement Sekera | db4e84c | 2017-08-11 10:06:15 +0200 | [diff] [blame] | 51 | fi |
| 52 | |
Klement Sekera | 94384e4 | 2017-07-11 07:29:37 +0200 | [diff] [blame] | 53 | rv=$? |
| 54 | atexit |
Klement Sekera | 8712ada | 2017-08-16 16:38:10 +0200 | [diff] [blame] | 55 | exit ${rv} |