gnunet_janitor.py.in (2403B)
1 #!@PYTHONEXE@ 2 # This file is part of GNUnet. 3 # (C) 2011, 2018 Christian Grothoff (and other contributing authors) 4 # 5 # GNUnet is free software: you can redistribute it and/or modify it 6 # under the terms of the GNU Affero General Public License as published 7 # by the Free Software Foundation, either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # GNUnet is distributed in the hope that it will be useful, but 11 # WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 # Affero General Public License for more details. 14 # 15 # You should have received a copy of the GNU Affero General Public License 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 # 18 # SPDX-License-Identifier: AGPL3.0-or-later 19 # 20 # Finds any gnunet processes still running in the system and kills them 21 # 22 # gnunet janitor can be used by invoking `make' like this: 23 # TESTS_ENVIRONMENT='${top_srcdir}/contrib/scripts/gnunet_janitor.py &&' make check 24 25 import os 26 import re 27 import subprocess 28 import sys 29 import shutil 30 import time 31 import signal 32 import terminate 33 34 35 def get_process_list(): 36 result = [] 37 pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] 38 for pid in pids: 39 with open(os.path.join('/proc', pid, 'cmdline'), 'rb') as p: 40 cmdline = p.read().split('\x00') 41 if len(cmdline) > 0: 42 result.append((pid, cmdline[0])) 43 return result 44 45 46 def main(): 47 procs = get_process_list() 48 gnunet_procs = [] 49 for p in procs: 50 if re.match(r'gnunet-.+', p[1]): 51 gnunet_procs.append(p) 52 for p in gnunet_procs: 53 if re.match(r'gnunet-service-arm', p[1]): 54 print("killing arm process {0:5} {1}".format(p[0], p[1])) 55 try: 56 terminate.safe_terminate_process_by_pid(int(p[0]), 1) 57 except OSError as e: 58 print("failed: {0}".format(e)) 59 pass 60 for p in gnunet_procs: 61 if not re.match(r'gnunet-service-arm', p[1]): 62 print("killing non-arm process {0:5} {1}".format(p[0], p[1])) 63 try: 64 terminate.safe_terminate_process_by_pid(int(p[0]), 1) 65 except OSError as e: 66 print("failed: {0}".format(e)) 67 pass 68 69 70 if __name__ == '__main__': 71 sys.exit(main())