Chromium Code Reviews| Index: build/install-chroot.sh |
| diff --git a/build/install-chroot.sh b/build/install-chroot.sh |
| index 155fc798b267237fad721a423b15a9e83c1b7f7e..0ef33d277cfcf152d6611781879ad4e8b57f76fa 100755 |
| --- a/build/install-chroot.sh |
| +++ b/build/install-chroot.sh |
| @@ -498,6 +498,7 @@ while [ "$#" -ne 0 ]; do |
| done |
| session="$(schroot -c "${chroot}" -b)" |
| +export CHROOT_SESSION_ID="${session}" |
| if [ $# -eq 0 ]; then |
| schroot -c "${session}" -r -p |
| @@ -509,13 +510,33 @@ rc=$? |
| i=$(schroot -c "${session}" -r -p ls -- -id /proc/self/root/. | |
| awk '{ print $1 }') 2>/dev/null |
| +other_pids= |
| while [ -n "$i" ]; do |
| - pids=$(ls -id1 /proc/*/root/. 2>/dev/null | |
| + pids=$({ ls -id1 /proc/*/root/. 2>/dev/null | |
|
jln (very slow on Chromium)
2013/07/23 00:41:20
Add a comment to explain the set substraction magi
|
| sed -e 's,^[^0-9]*'$i'.*/\([1-9][0-9]*\)/.*$,\1, |
| t |
| - d') >/dev/null 2>&1 |
| - [ -z "$pids" ] && break |
| - kill -9 $pids |
| + d'; |
| + echo "${other_pids}"; |
| + echo "${other_pids}"; } | sort | uniq -u) >/dev/null 2>&1 |
| + # Kill all processes that are still left running in the session. This is |
| + # typically an assortment of daemon processes that were started |
| + # automatically. They result in us being unable to tear down the session |
| + # cleanly. |
| + [ -z "${pids}" ] && break |
| + for j in $pids; do |
| + # Unfortunately, the way that schroot sets up sessions has the |
| + # side-effect of being unable to tell one session apart from another. |
| + # This can result in us attempting to kill processes in other sessions. |
| + # We make a best-effort to avoid doing so. |
| + k="$( ( xargs -0 -n1 </proc/$j/environ ) 2>/dev/null | |
| + sed 's/^CHROOT_SESSION_ID=/x/;t1;d;:1;q')" |
| + if [ -n "${k}" -a "${k#x}" != "${session}" ]; then |
| + other_pids="${other_pids} |
| +${j}" |
| + continue |
| + fi |
| + kill -9 $pids |
| + done |
| done |
| schroot -c "${session}" -e |
| exit $rc |