我们在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 3 import os 4 import sys 5 import getopt 6 import subprocess 8 def usage(): 9 print "killnames ..."10 sys.exit(2)12 def kill_names():13 try:14 opts, args=getopt.getopt(sys.argv[1:], "")15 except GetoptError, err:16 usage()18 if not args:19 print "Please input process name"20 sys.exit(2)21 # join List to string22 myparam="|".join(args)23 # get the infos of working processes24 myps=subprocess.Popen(["ps", "-e"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)25 # get List of pids26 mypids=subprocess.Popen(["awk", "/%s/ {print $1}" % myparam], stdin=myps.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip().split("\n")28 for mypid in mypids:29 os.system("sudo kill -8 %s" %s mypid)32 if __name__=='__main__':33 kill_names()
联系客服