From 00d462edc151ac0c27c6c79aa63be5c5e2027223 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 12 Jun 2018 11:38:59 -0400 Subject: run chroot in pids cgroup, and kill all pids in group when done --- debootstrap.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'debootstrap.sh') diff --git a/debootstrap.sh b/debootstrap.sh index 913bc66..520be3b 100755 --- a/debootstrap.sh +++ b/debootstrap.sh @@ -164,12 +164,43 @@ chroot_image() name=$2 shift 2 [ $# -gt 0 ] || set -- $default_chroot_command + cgdir=/sys/fs/cgroup/pids/vm-$suite-$name + mkdir "$cgdir" set -- \ + cgexec -g pids:vm-$suite-$name \ unshare -f -m -p \ chroot . \ /bin/sh -c 'mount -t proc proc /proc; mount -t devpts devpts /dev/pts; exec "$@"' sh \ "$@" sh_image "$suite" "$name" "$@" + + kill_cgroup "$cgdir" +} + +kill_cgroup() +{ + ( + cgdir="$1" + + # exec >/dev/null 2>&1 + + kill= + sleep=0.2 + for n in $(seq 1 20); do + + [ ! -d "$cgdir" ] || rmdir "$cgdir" && return + + pids=$(cat "$cgdir"/tasks) + [ -z "$pids" ] || continue + + kill $kill $pids + sleep $sleep + [ "$n" -eq 5 ] && sleep=1 + [ "$n" -eq 7 ] && sleep=3 + [ "$n" -eq 10 ] && kill=-KILL + done + return 1 + ) } clone() -- cgit v1.2.3