From aa7f15fec863bfa625f2908cee3d6dc6446e8663 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Fri, 5 Aug 2011 18:23:46 +0200 Subject: [PATCH] Make sure to kill all running processes in chroot. --- pakfire/builder.py | 2 ++ pakfire/util.py | 20 ++++++++++++++++++++ po/pakfire.pot | 12 ++++++------ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/pakfire/builder.py b/pakfire/builder.py index d8f12d21d..401b0bdf9 100644 --- a/pakfire/builder.py +++ b/pakfire/builder.py @@ -442,6 +442,8 @@ class Builder(object): os.mknod(filename, mode, device) def destroy(self): + util.orphans_kill(self.path) + logging.debug("Destroying environment %s" % self.path) if os.path.exists(self.path): diff --git a/pakfire/util.py b/pakfire/util.py index 774b49521..44fd454a7 100644 --- a/pakfire/util.py +++ b/pakfire/util.py @@ -4,10 +4,12 @@ from __future__ import division import fcntl import hashlib +import logging import os import progressbar import random import shutil +import signal import string import struct import sys @@ -199,3 +201,21 @@ def text_wrap(s, length=65): t.append(l) return [" ".join(l) for l in t] + +def orphans_kill(root, killsig=signal.SIGTERM): + """ + kill off anything that is still chrooted. + """ + logging.debug("Killing orphans...") + + for fn in [d for d in os.listdir("/proc") if d.isdigit()]: + try: + r = os.readlink("/proc/%s/root" % fn) + if os.path.realpath(root) == os.path.realpath(r): + logging.warning("Process ID %s is still running in chroot. Killing..." % fn) + + pid = int(fn, 10) + os.kill(pid, killsig) + os.waitpid(pid, 0) + except OSError, e: + pass diff --git a/po/pakfire.pot b/po/pakfire.pot index 1d94de78c..b4d8631df 100644 --- a/po/pakfire.pot +++ b/po/pakfire.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-08-04 00:03+0200\n" +"POT-Creation-Date: 2011-08-05 18:22+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,16 +38,16 @@ msgstr "" msgid "Downgrading" msgstr "" -#: ../pakfire/base.py:156 ../pakfire/base.py:198 ../pakfire/base.py:228 -#: ../pakfire/base.py:249 +#: ../pakfire/base.py:157 ../pakfire/base.py:199 ../pakfire/base.py:230 +#: ../pakfire/base.py:252 msgid "Nothing to do" msgstr "" -#: ../pakfire/base.py:184 +#: ../pakfire/base.py:185 msgid "There are no packages to install." msgstr "" -#: ../pakfire/base.py:445 +#: ../pakfire/base.py:448 msgid "Everything is fine." msgstr "" @@ -461,7 +461,7 @@ msgstr "" msgid "Running transaction" msgstr "" -#: ../pakfire/util.py:44 +#: ../pakfire/util.py:46 #, python-format msgid "%s [y/N]" msgstr "" -- 2.39.5