gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

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())