按名称杀死进程?

我试图杀死一个进程(特别是iChat)。 在命令行上,我使用这些命令:

ps -A | grep iChat 

然后:

 kill -9 PID 

但是,我不确定如何将这些命令转换为Python。

假设你在一个类似Unix的平台上(这样ps -A存在),

 >>> import subprocess, signal >>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE) >>> out, err = p.communicate() 

给你ps -A的输出variables(一个string)。 你可以把它分解成几行并在它们上面循环…:

 >>> for line in out.splitlines(): ... if 'iChat' in line: ... pid = int(line.split(None, 1)[0]) ... os.kill(pid, signal.SIGKILL) ... 

(你可以避免导入signal ,并使用9而不是signal.SIGKILL ,但我不是特别喜欢这种风格,所以我宁愿使用这种命名常量)。

当然,你可以在这些线上做更复杂的处理,但是这样做模仿你正在做的事情。

如果你想避免ps ,那么跨越不同类Unix系统是很难做到的(从某种意义上说, ps是获取进程列表的常用API)。 但是如果你有一个特定的类Unix系统,只需要(不需要任何跨平台的可移植性),这可能是可能的; 特别是在Linux上, /proc伪文件系统是非常有用的。 但是我们需要澄清一下你的具体要求,然后才能在后面提供帮助。

psutil可以按名称find进程并杀死它:

 import psutil PROCNAME = "python.exe" for proc in psutil.process_iter(): # check whether the process name matches if proc.name() == PROCNAME: proc.kill() 

如果您必须考虑Windows案例才能跨平台,请尝试以下操作:

 os.system('taskkill /f /im exampleProcess.exe') 

如果你有killall:

 os.system("killall -9 iChat"); 

要么:

 os.system("ps -C iChat -o pid=|xargs kill -9") 

这在Windows 7中为我工作

 import subprocess subprocess.call("taskkill /IM geckodriver.exe") 

下面的代码将杀死所有iChat导向的程序:

 p = subprocess.Popen(['pgrep', '-l' , 'iChat'], stdout=subprocess.PIPE) out, err = p.communicate() for line in out.splitlines(): line = bytes.decode(line) pid = int(line.split(None, 1)[0]) os.kill(pid, signal.SIGKILL) 

您可以在unix系统中使用pkill <process_name>来按名称杀死进程。

那么Python代码将是:

 >>> import os >>> process_name=iChat >>> os.system('pkill '+process_name) 

对我来说唯一有效的是:

例如

 import subprocess proc = subprocess.Popen(["pkill", "-f", "scriptName.py"], stdout=subprocess.PIPE) proc.wait() 

如果你想杀死进程(ES)或cmd.exe携带一个特定的标题(S)。

 import csv, os import subprocess # ## Find the command prompt windows. # ## Collect the details of the command prompt windows and assign them. tasks = csv.DictReader(subprocess.check_output('tasklist /fi "imagename eq cmd.exe" /v /fo csv').splitlines(), delimiter=',', quotechar='"') # ## The cmds with titles to be closed. titles= ["Ploter", "scanFolder"] # ## Find the PIDs of the cmds with the above titles. PIDList = [] for line in tasks: for title in titles: if title in line['Window Title']: print line['Window Title'] PIDList.append(line['PID']) # ## Kill the CMDs carrying the PIDs in PIDList for id in PIDList: os.system('taskkill /pid ' + id ) 

希望它有帮助。 他们可能是许多更好的解决scheme。

您可以使用WMI模块在Windows上执行此操作,虽然它比您习惯的UNIX操作系统笨拙得多; import WMI需要很长时间,并且在这个过程中存在中等的痛苦。

9代表SIGKILL信号。 所以你可以用KILL代替9

 os.system("kill -s KILL 1234") 

0R

 os.sytem("kill -KILL 1234") 

你可以从Python这些确切的命令是这样的

 import os print os.system('kill -9 ' + pid) 

但是你得到pid的命令需要一些工作,但是(不能仅仅假设它有iChat,它实际上是iChat),你应该使用killall来代替Matthew Flaschen

 import psutil pid_list=psutil.get_pid_list() print pid_list p = psutil.Process(1052) print p.name for i in pid_list: p = psutil.Process(i) p_name=p.name print str(i)+" "+str(p.name) if p_name=="PerfExp.exe": print "*"*20+" mam ho "+"*"*20 p.kill()