Aar*_*ron 84 python kill process
我正试图杀死一个进程(特别是iChat).在命令行中,我使用以下命令:
ps -A | grep iChat
Run Code Online (Sandbox Code Playgroud)
然后:
kill -9 PID
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何将这些命令转换为Python.
Gia*_*olà 176
psutil可以按名称查找进程并将其杀死:
import psutil
PROCNAME = "python.exe"
for proc in psutil.process_iter():
# check whether the process name matches
if proc.name() == PROCNAME:
proc.kill()
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 78
假设你是一个类Unix的平台(这样ps -A存在),
>>> import subprocess, signal
>>> p = subprocess.Popen(['ps', '-A'], stdout=subprocess.PIPE)
>>> out, err = p.communicate()
Run Code Online (Sandbox Code Playgroud)
给出变量(字符串)中ps -A的输出out.你可以将它分解成行并循环它们......:
>>> for line in out.splitlines():
... if 'iChat' in line:
... pid = int(line.split(None, 1)[0])
... os.kill(pid, signal.SIGKILL)
...
Run Code Online (Sandbox Code Playgroud)
(你可以避免导入signal,而9不是使用signal.SIGKILL,但我只是不喜欢那种风格,所以我宁愿用这种方式使用命名常量).
当然,您可以在这些线上进行更复杂的处理,但这模仿了您在shell中所做的事情.
如果您所追求的是避免ps,那么在不同的类Unix系统中很难做到(ps在某种意义上,它们是获取进程列表的常用API).但是如果你有一个特定的类Unix系统,只有(不需要任何跨平台的可移植性),它可能是可能的; 特别是在Linux上,/proc伪文件系统非常有用.但是,在我们可以帮助后一部分之前,您需要澄清您的确切要求.
lim*_*ker 35
如果您必须考虑Windows案例才能跨平台,请尝试以下方法:
os.system('taskkill /f /im exampleProcess.exe')
Run Code Online (Sandbox Code Playgroud)
Mat*_*hen 22
如果你有killall:
os.system("killall -9 iChat");
Run Code Online (Sandbox Code Playgroud)
要么:
os.system("ps -C iChat -o pid=|xargs kill -9")
Run Code Online (Sandbox Code Playgroud)
小智 7
这在Windows 7中为我工作
import subprocess
subprocess.call("taskkill /IM geckodriver.exe")
Run Code Online (Sandbox Code Playgroud)
你可以试试这个。但在您需要使用安装psutil之前sudo pip install psutil
import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
if 'ichat' in proc.info['name']:
proc.kill()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
191639 次 |
| 最近记录: |