aboutsummaryrefslogtreecommitdiff
path: root/sh
diff options
context:
space:
mode:
authorPatrick McLean <chutzpah@gentoo.org>2017-10-25 21:19:15 -0500
committerWilliam Hubbs <w.d.hubbs@gmail.com>2017-10-25 21:19:15 -0500
commit35b88fb42bb8e0a56cdc1947342f1b89c98658bc (patch)
tree91720b5ab003babf5134ce857e48881446727d38 /sh
parenta428c325a902bba55a849a07a59c0c1567404db2 (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.in14
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