pidof.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/usr/bin/env python
  2. # Copyright (c) 2009, Giampaolo Rodola', karthikrev. All rights reserved.
  3. # Use of this source code is governed by a BSD-style license that can be
  4. # found in the LICENSE file.
  5. """
  6. A clone of 'pidof' cmdline utility.
  7. $ pidof python
  8. 1140 1138 1136 1134 1133 1129 1127 1125 1121 1120 1119
  9. """
  10. from __future__ import print_function
  11. import psutil
  12. import sys
  13. def pidof(pgname):
  14. pids = []
  15. for proc in psutil.process_iter():
  16. # search for matches in the process name and cmdline
  17. try:
  18. name = proc.name()
  19. except psutil.Error:
  20. pass
  21. else:
  22. if name == pgname:
  23. pids.append(str(proc.pid))
  24. continue
  25. try:
  26. cmdline = proc.cmdline()
  27. except psutil.Error:
  28. pass
  29. else:
  30. if cmdline and cmdline[0] == pgname:
  31. pids.append(str(proc.pid))
  32. return pids
  33. def main():
  34. if len(sys.argv) != 2:
  35. sys.exit('usage: %s pgname' % __file__)
  36. else:
  37. pgname = sys.argv[1]
  38. pids = pidof(pgname)
  39. if pids:
  40. print(" ".join(pids))
  41. if __name__ == '__main__':
  42. main()