Python:一个小小程序,如何删除一组进程,而且只提供程序名而不需要pid。
我们在shell下经常使用 'ps -e | grep name' 或者 ‘ps -e | awk '/name/ {print $1}'' 寻找一个进程的pid,然后通过 ' sudo kill -8 xxxx' 来删除这个进程(发现,'sudo killall name' 不能有效的删除进程)。但是有时候需要删除多个进程,要反复执行以上命令。bash可以很好地完成批量删除进程的任务。
但是这里我打算探讨一下python下的解决方法。这里用到了python的subprocess模块。
1 #!/usr/bin/env python 2 3 import os 4 import sys 5 import getopt 6 import subprocess 7 8 def usage(): 9 print "killnames ..." 10 sys.exit(2) 11 12 def kill_names(): 13 try: 14 opts, args=getopt.getopt(sys.argv[1:], "") 15 except GetoptError, err: 16 usage() 17 18 if not args: 19 print "Please input process name" 20 sys.exit(2) 21 # join List to string 22 myparam="|".join(args) 23 # get the infos of working processes 24 myps=subprocess.Popen(["ps", "-e"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 25 # get List of pids 26 mypids=subprocess.Popen(["awk", "/%s/ {print $1}" % myparam], stdin=myps.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip().split("\n") 27 28 for mypid in mypids: 29 os.system("sudo kill -8 %s" %s mypid) 30 31 32 if __name__=='__main__': 33 kill_names()