import psutil
def close_exe(exe_name):
for proc in psutil.process_iter():
try:
if proc.name() == exe_name:
proc.kill()
print('{} has been killed'.format(exe_name))
return True
except psutil.NoSuchProcess:
print('there is no process named {}'.format(exe_name))
return True
except psutil.ZombieProcess:
print('{} is a zombieprocess'.format(exe_name))
return True
except psutil.AccessDenied:
print('you do not have permission to close {}'.format(exe_name))
return False
print('{} is not running'.format(exe_name))
return True
if __name__ == '__main__':
close_exe('EXCEL.EXE')
close_exe('wps.exe')
在Python中,你可以使用os.system()
或psutil
模块来关闭运行中的excel.exe
和wps.exe
进程。以下是两种方法的示例:
- 使用
os.system()
¹:
import os
def kill_exe(exe_name):
os.system('taskkill /f /t /im ' + exe_name)
print("已关闭进程 {}.".format(exe_name))
if __name__ == '__main__':
kill_exe('excel.exe')
kill_exe('wps.exe')
这段代码会关闭名为excel.exe
和wps.exe
的进程。
- 使用
psutil
模块²:
import psutil
def close_exe(exe_name):
for proc in psutil.process_iter():
try:
if proc.name() == exe_name:
proc.kill()
print('已关闭进程 {}.'.format(exe_name))
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
if __name__ == '__main__':
close_exe('EXCEL.EXE')
close_exe('wps.exe')
这段代码会遍历所有正在运行的进程,并检查进程名称是否为EXCEL.EXE
或wps.exe
。如果是,就会终止该进程。
请注意,以上代码可能需要根据你的实际情况进行修改。希望这个信息对你有所帮助!
源: 与必应的对话, 2023/11/18
(1) python 关闭exe程序进程_python 线程结束了exe进程关闭-CSDN博客. https://blog.csdn.net/weixin_44493841/article/details/107098662.
(2) python关闭excel进程,实现手动关闭excel的效果 - 哔哩哔哩. https://www.bilibili.com/read/cv22404879/.
(3) 已经打开的excel如何关闭 python - 51CTO博客. https://blog.51cto.com/u_16213447/7303808.
在Windows系统中,psutil.ZombieProcess
异常通常不会出现,因为Windows的进程管理机制与Unix和Linux不同。在Unix和Linux系统中,当一个子进程结束,而父进程没有调用wait()或waitpid()来获取其退出状态,那么它就会成为僵尸进程。但在Windows中,当一个进程结束时,其进程对象并不会立即被销毁,而是等待其父进程通过调用WaitForSingleObject
或WaitForMultipleObjects
函数来获取其退出状态。只有当这些函数被调用后,进程对象才会被销毁¹。因此,Windows系统通常不会出现僵尸进程的问题¹。
在Python的psutil
模块中,psutil.ZombieProcess
异常是在尝试获取已经不存在的进程信息时抛出的²³⁵。例如,如果你在进程已经结束后尝试调用proc.name()
或proc.status()
,就可能会抛出这个异常²³⁵。
以下是一个示例,展示了如何在遍历所有进程并尝试获取进程信息时处理psutil.ZombieProcess
异常²³⁵:
import psutil
for proc in psutil.process_iter():
try:
print(proc.name())
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
pass
这段代码会遍历所有正在运行的进程,并尝试打印每个进程的名称。如果在尝试获取进程名称时进程已经不存在,就会抛出psutil.ZombieProcess
异常,这个异常会被捕获并忽略,然后继续处理下一个进程²³⁵。
如何使用 psutil 模块来监控进程活动? - 知乎. https://www.zhihu.com/question/595336413.
(2) python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间、内存使用量、内存占用率、PID、名称、创建 .... https://blog.csdn.net/zhongkeyuanchongqing/article/details/118341658.
(3) psutil的基本使用方法_psutil.process_iter-CSDN博客. https://blog.csdn.net/qq_45240585/article/details/108082223.
(4) psutil.AccessDenied: psutil.AccessDenied - CSDN博客. https://blog.csdn.net/chouzhou9701/article/details/108235628.
(5) 如何在 Python 中终止 Windows 上运行的进程? - 腾讯云. https://cloud.tencent.com/developer/article/2312099.
psutil.NoSuchProcess
,psutil.AccessDenied
和psutil.ZombieProcess
是Python的psutil
模块中定义的三种异常,它们的含义如下:
psutil.NoSuchProcess
¹⁴:这个异常表示试图访问的进程不存在。例如,你可能试图获取一个已经终止的进程的信息,或者该进程的PID已经被操作系统回收并分配给了新的进程。psutil.AccessDenied
⁵⁶:这个异常表示你没有足够的权限来执行某个操作。例如,你可能试图杀死一个属于其他用户的进程,或者试图访问一些受保护的系统信息。在Windows系统中,你可能需要以管理员身份运行Python脚本来获取足够的权限⁵。psutil.ZombieProcess
⁴⁸:这个异常表示试图访问的进程已经终止,但是其父进程还没有回收它的退出状态,所以它仍然在进程表中占据一个位置。这种进程被称为僵尸进程。在Unix和Linux系统中,如果一个进程终止,而其父进程没有调用wait()或waitpid()来获取它的退出状态,那么它就会成为僵尸进程。
在Windows系统中,僵尸进程的概念与Unix和Linux系统中的不同。在Unix和Linux系统中,僵尸进程是指已经结束但其父进程尚未收集其退出状态的进程²。然而,在Windows系统中,当一个进程结束时,其进程对象并不会立即被销毁,而是等待其父进程通过调用WaitForSingleObject
或WaitForMultipleObjects
函数来获取其退出状态。只有当这些函数被调用后,进程对象才会被销毁¹。
然而,与Unix和Linux系统不同,Windows系统不会因为父进程没有调用这些函数就保留已经结束的进程的进程描述符,因此在Windows系统中通常不会出现僵尸进程的问题¹。
如果你想查看Windows系统中的所有进程,你可以使用任务管理器(Task Manager)或者tasklist
命令³。如果你想结束一个进程,你可以在任务管理器中右键点击该进程并选择“结束任务”,或者使用taskkill
命令³。
1) 僵尸进程与孤儿进程总结(产生原因及回收方法)_init进程怎么回收僵尸子进程的-CSDN博客. https://blog.csdn.net/zzz897089046/article/details/108147206.
(2) 僵尸 (WinDbg) - Windows drivers | Microsoft Learn. https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debuggercmds/-zombies.
(3) Windows如何杀掉进程? - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/450226123.
(4) 僵尸进程产生实例_僵尸进程例子-CSDN博客. https://blog.csdn.net/qq_23662505/article/details/125255861.
(5) undefined. https://www.cnblogs.com/Anker/p/3271773.html.
(1) Python Examples of psutil.NoSuchProcess - ProgramCreek.com. https://www.programcreek.com/python/example/53870/psutil.NoSuchProcess.
(2) python - psutil processes that are not running, or reused or are dead .... https://stackoverflow.com/questions/22785224/psutil-processes-that-are-not-running-or-reused-or-are-dead-or-zombie.
(3) Getting 'psutil.AccessDenied (pid=6836)' error using psutil. https://stackoverflow.com/questions/62118693/getting-psutil-accessdenied-pid-6836-error-using-psutil.
(4) python psutil on windows gives access denied - Stack Overflow. https://stackoverflow.com/questions/7349854/python-psutil-on-windows-gives-access-denied.
(5) Python Examples of psutil.ZombieProcess - ProgramCreek.com. https://www.programcreek.com/python/example/88698/psutil.ZombieProcess.
(6) Error : psutil.NoSuchProcess: Process no longer exists (pid=23100). https://stackoverflow.com/questions/74420568/error-psutil-nosuchprocess-process-no-longer-exists-pid-23100.
(7) psutil的Process python获取进程信息_psutil.process-CSDN博客. https://blog.csdn.net/gymaisyl/article/details/101274862.
(8) psutil.AccessDenied: psutil.AccessDenied - CSDN博客. https://blog.csdn.net/chouzhou9701/article/details/108235628.
(9) Why am I seeing ZombieProcess exceptions when running Python tests with .... https://stackoverflow.com/questions/76530688/why-am-i-seeing-zombieprocess-exceptions-when-running-python-tests-with-nox-on-m.
(10) python - How do I properly terminate a process with psutil without it .... https://stackoverflow.com/questions/73124496/how-do-i-properly-terminate-a-process-with-psutil-without-it-becoming-a-zombie.
在Python中,你可以使用subprocess
模块来启动一个新的进程,并设置其环境变量。然后,你可以根据这些环境变量来找到并关闭这个进程。以下是一个示例:
import os
import subprocess
import signal
import time
# 创建一个新的环境变量字典
env = os.environ.copy()
env['MY_ENV_VAR'] = 'my_value'
# 使用新的环境变量启动一个新的进程
proc = subprocess.Popen(['my_command'], env=env)
# 在这里,你可以对新进程进行各种操作
# 等待一段时间
time.sleep(10)
# 找到并关闭设置了特定环境变量的进程
for p in psutil.process_iter(['pid', 'name', 'environ']):
try:
if p.info['environ'] is not None and 'MY_ENV_VAR' in p.info['environ']:
os.kill(p.info['pid'], signal.SIGTERM)
print('已关闭进程 {}.'.format(p.info['pid']))
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
这段代码首先创建了一个新的环境变量字典,并设置了一个名为MY_ENV_VAR
的环境变量。然后,它使用这个新的环境变量字典启动了一个新的进程。
然后,代码等待了10秒钟,以便新进程有足够的时间启动并运行。
最后,代码遍历了所有正在运行的进程,并检查它们的环境变量。如果一个进程的环境变量中包含了MY_ENV_VAR
,那么这个进程就会被关闭¹³。
请注意,以上代码可能需要根据你的实际情况进行修改。希望这个信息对你有所帮助!
(1) subprocess --- 子进程管理 — Python 3.12.0 文档. https://docs.python.org/zh-cn/3/library/subprocess.html.
(2) Python中如何优雅的杀死进程和线程 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/531389397.
(3) 退出python进程的最佳方法 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/426492312.
(4) Python:如果父进程停止运行,Python如何关闭子进程|极客教程. https://geek-docs.com/python/python-ask-answer/881_python_kill_child_process_if_parent_is_killed_in_python.html.
(5) 【Python 教程】查找程序PID并关闭程序进程_python subprocess终止_技术美术狂热分子的博客-CSDN博客. https://blog.csdn.net/sheldonlei/article/details/128748063.