Re: Approaches for killing left-behind processes /Re: killer in the manual
Am Friday, 6. November 2009 schrieb RalfGesellensetter:
> Dear José,
> thank you for sharing your interesting script
> (and supporting my approach this way).
> It is charmingly short - thanks to the power of Gambas
> (even more charming!).
As your script is quite short - and most likely under GPL,
I dare attach it to this mail - so everybody can see the
nice syntax of Gambas Basic.
I might be able to test the script next Friday.
> I think I remember that it is not a big deal anymore to meet
> the dependencies for running Gambas script - so I'd suggest
> to add the package needed (gambas2-runtime?), as it won't be trivial
> to tranlate your script to a shell [perl] script!?
I remember that the Gambas IDE has an export filter to Debian packages.
Assuming that all dependencies are set as needed, it shouldn't be a big
deal to provide a first package for this.
Sometimes, prolongued peeking pays off ;)
Regards & thanks again
STATIC PUBLIC SUB KillAllChildren(PPID AS Integer)
DIM result AS String
DIM bits AS String
DIM child AS String
SHELL "ps -A -o %p,%P|grep " & CStr(PPID) & "|cut -f1 -d," TO result
bits = Split(result, "\n")
FOR EACH child IN bits
TRY SHELL "kill -9 " & child & " 2>/dev/null"
STATIC PUBLIC SUB Killer()
DIM pids AS String
DIM uids AS Collection
DIM bits AS String
DIM tmpShell AS String
DIM sTmp AS String
DIM uid AS Integer
'get logged users:
SHELL "who|cut -f1 -d\" \"|uniq" TO tmpShell
bits = Split(Trim$(tmpShell), "\n")
IF bits.Count = 0 THEN RETURN
uids = NEW Collection(gb.Text)
FOR EACH sTmp IN bits
SHELL "getent passwd " & sTmp & "|cut -f3 -d:" TO tmpShell 'this works even with ldap users
tmpShell = Trim$(tmpShell)
TRY uids.Add(sTmp, tmpShell)
'get current processes
SHELL "ps -e -o euid= -o pid=|tr -s \" \"" TO tmpShell
pids = Split(Trim$(tmpShell), "\n")
FOR EACH sTmp IN pids
bits = Split(Trim$(sTmp), " ")
IF bits.Count < 2 THEN CONTINUE
uid = CInt(bits)
'uid's under 1000 are ignored and nobody user too, as it's used by some needed daemons:
IF uid >= 1000 AND uid <> 65534 AND NOT uids.Exist(bits) THEN
IF Utils.Debugging THEN PRINT "\\\\\\Killed: " & bits & " of " & bits