3 回答

TA贡献1866条经验 获得超5个赞
您可以在此处搜索您的应用程序并关闭。
import psutil
import os
ls = []
for p in psutil.process_iter():
try:
name = p.name()
cmdline = p.cmdline()
exe = p.exe()
pid = p.pid
except (psutil.AccessDenied, psutil.ZombieProcess):
continue
except psutil.NoSuchProcess:
continue

TA贡献1757条经验 获得超7个赞
此行不起作用,因为您需要提供所有参数和确切的字符串。
if process.cmdline() == args:
我将其更改为包括一些字符串和部分字符串:
def process_get(*args):
"""Returns the process matching ``args``.
Relies on ``args`` matching the argument list of the process to find.
Args:
*args: process arguments, e.g. ["java", "jar", "partialjarname"]
Returns:
:obj:`process`
"""
import psutil
for process in psutil.process_iter():
try:
if all(x in " ".join(process.cmdline()) for x in args):
return process
except psutil.AccessDenied:
pass
return None

TA贡献1802条经验 获得超5个赞
如果您无法找出正确的 PID,我可能有一个替代解决方案,利用您用于启动该过程的参数。它不是那么好,因为您将遍历流程树直到找到匹配项,但这样它肯定会找到流程。
请记住,如果您有多个运行相同参数的进程,这可能不会总是返回正确的进程。
def process_get(*args):
"""Returns the process matching ``args``.
Relies on ``args`` matching the argument list of the process to find.
Args:
*args: process arguments, e.g. ["java", "-jar", "somejar.jar"]
Returns:
:obj:`process`
"""
import psutil
for process in psutil.process_iter():
try:
if process.cmdline() == args:
return process
except psutil.AccessDenied:
pass
return None
添加回答
举报