commit: 35b88fb42bb8e0a56cdc1947342f1b89c98658bc
Author: Patrick McLean <chutzpah <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 26 02:19:15 2017 +0000
Commit: William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Oct 26 02:19:15 2017 +0000
URL: https://gitweb.gentoo.org/proj/openrc.git/commit/?id=35b88fb4
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
sh/rc-cgroup.sh.in | 14 ++++++++++----
1 file 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