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

 

摘自 CCJPP

相关内容

    暂无相关文章

评论关闭