diff options
Diffstat (limited to 'contrib/gnunet_janitor.py.in')
-rw-r--r-- | contrib/gnunet_janitor.py.in | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/contrib/gnunet_janitor.py.in b/contrib/gnunet_janitor.py.in new file mode 100644 index 0000000..c11ff4f --- /dev/null +++ b/contrib/gnunet_janitor.py.in @@ -0,0 +1,74 @@ +#!@PYTHON@ +# This file is part of GNUnet. +# (C) 2011 Christian Grothoff (and other contributing authors) +# +# GNUnet 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 2, or (at your +# option) any later version. +# +# GNUnet 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 GNUnet; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Finds any gnunet processes still running in the system and kills them +# +# gnunet janitor can be used by invoking `make' like this: +# TESTS_ENVIRONMENT='${top_srcdir}/contrib/gnunet_janitor.py &&' make check + +from __future__ import print_function +import os +import re +import subprocess +import sys +import shutil +import time +import signal + +if os.name == 'nt': + from win32com.client import GetObject + WMI = GetObject('winmgmts:') + +def get_process_list (): + result = [] + if os.name == 'nt': + processes = WMI.InstancesOf('Win32_Process') + for p in processes: + result.append ((p.Properties_('ProcessId').Value, re.sub (r'(.+)\.exe', r'\1', p.Properties_('Name').Value))) + else: + pids = [pid for pid in os.listdir('/proc') if pid.isdigit ()] + for pid in pids: + result.append ((pid, open (os.path.join ('/proc', pid, 'comm'), 'rb').read ())) + return result + +def main (): + procs = get_process_list () + gnunet_procs = [] + for p in procs: + if re.match (r'gnunet-.+', p[1]): + gnunet_procs.append (p) + for p in gnunet_procs: + if re.match (r'gnunet-service-arm', p[1]): + print ("killing arm process {0:5} {1}".format (p[0], p[1])) + try: + os.kill (p[0], signal.SIGTERM) + except OSError as e: + print ("failed: {0}".format (e)) + pass + for p in gnunet_procs: + if not re.match (r'gnunet-service-arm', p[1]): + print ("killing non-arm process {0:5} {1}".format (p[0], p[1])) + try: + os.kill (p[0], signal.SIGTERM) + except OSError as e: + print ("failed: {0}".format (e)) + pass + +if __name__ == '__main__': + sys.exit (main ()) |