From 7b0d1bcc01c0c6144de630fdebb913bc256e389d Mon Sep 17 00:00:00 2001 From: Mike Hiretsky Date: Fri, 19 Nov 2010 15:34:11 +0300 Subject: [PATCH] Add autokill processes. --- i18n/cl_builder_ru.mo | Bin 13374 -> 13842 bytes pym/cl_builder.py | 46 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/i18n/cl_builder_ru.mo b/i18n/cl_builder_ru.mo index feb3325e2a3ee85fd1b4b8dc7d65404880ece911..9d6b44bfe785547d248fd6ab40b6575dd0472fb1 100644 GIT binary patch delta 2808 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 diff --git a/pym/cl_builder.py b/pym/cl_builder.py index 9279f80..0e5051d 100644 --- a/pym/cl_builder.py +++ b/pym/cl_builder.py @@ -34,6 +34,7 @@ from cl_distr import IsoDistributive, DirectoryDistributive, \ from cl_template import template,iniParser from cl_vars_share import varsShare from datetime import datetime +from time import sleep from cl_kernel_utils import KernelConfig,InitRamFs @@ -261,6 +262,22 @@ class cl_builder(color_print): return data[5] return "" + def getProcessByRoot(self,rootPath): + def psax(x): + try: + rootPath = path.join('/proc',x,'root') + cmdLinePath = path.join('/proc',x,'cmdline') + if path.exists(rootPath) and path.exists(cmdLinePath): + return {'pid':x, + 'root':os.readlink(rootPath), + 'cmdline':open(cmdLinePath,'r').read().strip()} + except: + pass + return {'pid':x,'root':'','cmdline':''} + procid = filter(lambda x:x.isdigit(),os.listdir('/proc')) + return filter(lambda x:x['root'].startswith(rootPath), + map(psax,procid)) + def printInfo(self): self.printSUCCESS(_("Creating image of") + " Calculate Linux") self.defaultPrint("%s\n"%_("System information")) @@ -295,6 +312,16 @@ class cl_builder(color_print): else: self.printWARNING(_("WARNING") +": " + _("image will be created on disk which mounted to root")) + warningProc = \ + self.getProcessByRoot(self.clVars.Get('cl_builder_path')) + if warningProc: + self.printWARNING(_("WARNING") +": " + + _("continuation of the operation will kill follow process:")) + for procObj in warningProc: + self.printWARNING( + " %s"%" ".join( + map(lambda x:x.replace("\n"," ").strip(), + procObj['cmdline'].split('\x00')))[:75]) self.defaultPrint("\n") else: @@ -378,6 +405,25 @@ class cl_builder(color_print): self.assembleIso = False self.printERROR(_("Interrupting the image creating")) return False + + killMap = [(0,15,_("Terminating %s processes")), + (4,9,_("Kill %s processes")), + (2,0,None), + (10,9,_("Repeat kill %s processes"))] + listing = self.getProcessByRoot(self.clVars.Get('cl_builder_path')) + for waitTime,killCode,msg in killMap: + sleep(waitTime) + listing = filter(lambda x:path.exists(path.join('/proc',x['pid'])), + listing) + if not listing: + break + if msg: + self.printSUCCESS(msg%",".join(map(lambda x:x['pid'],listing)) + +" ...") + if not killCode: + continue + for i in listing: + os.kill(int(i['pid']),killCode) self.printMessageForTest(_("Prepare data for live image")) self.prepareSourceDistributive(self.sourceDistr) self.printByResult(True)