El dom, 08-11-2009 a las 14:13 +0100, RalfGesellensetter escribió: > 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 > Ralf You've been faster than me ;) As many people don't feel confident with gambas I have translated the script into python. It's attached to this email. For this script to work, it must be executed as root. Consider it as a draft to a possible and more elegant solution. I think that some config options should be added to it. Now if you want to run it in background, you have to execute: killer.py & And if you want to change the time between "killings", the line at the end with time.sleep(5) should change the 5 seconds to any other name. Anyway, I've tested it a little bit and seems to work exactly as the gambas version we've been running for a long time. On the other hand, in Debian lenny there is a gambas package called: gambas2-script, installing it you can run any gambas code as the previous one, just adding: #!/usr/bin/env gbs2 as the first line of the text file (and giving exec permissions to the file) Hope this helps. Regards
#!/usr/bin/env python
# -*- coding: utf-8 -*-
##############################################################################
# Project: Killer
# Module: killer.py
# Purpose: First draft of a simple killer.
# Language: Python 2.5
# Date: 8-Nov-2009.
# Ver: 28-Nov-2009.
# Author: José L. Redrejo Rodríguez
# Copyright: 2009 - José L. Redrejo Rodríguez <jredrejo @nospam@ debian.org>
#
# killer.py is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# HMIServer is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with killer.py. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
import sys,os
import signal
import time
import commands
class Killer():
def _getLoggedUsers(self):
logged=commands.getoutput("who|cut -f1 -d' '|uniq" )
loggedusers=logged.splitlines()
uids={}
if len(loggedusers) != 0:
for user in loggedusers:
newID=commands.getoutput("getent passwd " + user + "|cut -f3 -d:")
uids[newID]=user
return uids
def searchZombies(self):
print "searching targets"
uids=self._getLoggedUsers()
processes=commands.getoutput("ps -e -o euid= -o pid=|tr -s ' '")
pids=processes.splitlines()
for line in pids:
bits=line.split()
if len(bits)>2:
continue
uid=int(bits[0])
if uid>=1000 and uid<>65534 and not uids.has_key(bits[0]):
self._killAllChildren(bits[1])
def _killAllChildren(self,ppid):
result=commands.getoutput("ps -A -o %p,%P|grep " + ppid + "|cut -f1 -d,")
for child in result.splitlines():
os.system ("kill -9 " + child + " 2>/dev/null")
def handler(signum, frame):
print 'No more murders today'
sys.exit()
signal.signal(signal.SIGINT, handler)
myKiller=Killer()
while True:
time.sleep(5)
myKiller.searchZombies()
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente