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

 

 

posted @ 2012-04-28 20:33  CCJPP  阅读(748)  评论(0编辑  收藏  举报