diff options
author | Patrick McLean <chutzpah@gentoo.org> | 2017-10-25 21:19:15 -0500 |
---|---|---|
committer | William Hubbs <w.d.hubbs@gmail.com> | 2017-10-25 21:19:15 -0500 |
commit | 35b88fb42bb8e0a56cdc1947342f1b89c98658bc (patch) | |
tree | 91720b5ab003babf5134ce857e48881446727d38 /sh | |
parent | a428c325a902bba55a849a07a59c0c1567404db2 (diff) |
cgroups_cleanup: clean up shutdown signaling
- do not sleep for the full 90 seconds if processes are dead
- re-arrange the order of signals we attempt to send to the processes
Diffstat (limited to 'sh')
-rw-r--r-- | sh/rc-cgroup.sh.in | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/sh/rc-cgroup.sh.in b/sh/rc-cgroup.sh.in index d48957ac..5bc7db54 100644 --- a/sh/rc-cgroup.sh.in +++ b/sh/rc-cgroup.sh.in @@ -203,15 +203,21 @@ cgroup_cleanup() { cgroup_running || return 0 ebegin "starting cgroups cleanup" - local pids + local pids loops=0 pids="$(cgroup_get_pids)" if [ -n "${pids}" ]; then - kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null kill -s CONT ${pids} 2> /dev/null + kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null yesno "${rc_send_sighup:-no}" && kill -s HUP ${pids} 2> /dev/null - sleep "${rc_timeout_stopsec:-90}" - yesno "${rc_send_sigkill:-yes}" && + kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null + while [ -n "$(cgroup_get_pids)" ] && + [ "${loops}" -lt "${rc_timeout_stopsec:-90}" ]; do + loops=$((loops+1)) + sleep 1 + done + pids="$(cgroup_get_pids)" + [ -n "${pids}" ] && yesno "${rc_send_sigkill:-yes}" && kill -s KILL ${pids} 2> /dev/null fi cgroup2_remove |