gnunet_janitor.py.in 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. import os
  25. import re
  26. import subprocess
  27. import sys
  28. import shutil
  29. import time
  30. import signal
  31. import terminate
  32. def get_process_list():
  33. result = []
  34. pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
  35. for pid in pids:
  36. with open(os.path.join('/proc', pid, 'cmdline'), 'rb') as p:
  37. cmdline = p.read().split('\x00')
  38. if len(cmdline) > 0:
  39. result.append((pid, cmdline[0]))
  40. return result
  41. def main():
  42. procs = get_process_list()
  43. gnunet_procs = []
  44. for p in procs:
  45. if re.match(r'gnunet-.+', p[1]):
  46. gnunet_procs.append(p)
  47. for p in gnunet_procs:
  48. if re.match(r'gnunet-service-arm', p[1]):
  49. print("killing arm process {0:5} {1}".format(p[0], p[1]))
  50. try:
  51. terminate.safe_terminate_process_by_pid(int(p[0]), 1)
  52. except OSError as e:
  53. print("failed: {0}".format(e))
  54. pass
  55. for p in gnunet_procs:
  56. if not re.match(r'gnunet-service-arm', p[1]):
  57. print("killing non-arm process {0:5} {1}".format(p[0], p[1]))
  58. try:
  59. terminate.safe_terminate_process_by_pid(int(p[0]), 1)
  60. except OSError as e:
  61. print("failed: {0}".format(e))
  62. pass
  63. if __name__ == '__main__':
  64. sys.exit(main())