用Python编程检查进程退出码的办法(GetExitCodeProcess())
发布时间:2024-01-13 04:52:12
在Python中,我们可以使用subprocess模块来启动和管理子进程,并且可以使用subprocess.Popen来获得子进程的退出码。以下是一个使用GetExitCodeProcess()的例子:
import subprocess
import ctypes
# 定义常量
PROCESS_ALL_ACCESS = (0x000F0000 | 0x00100000 | 0xFFF)
STILL_ACTIVE = 259
# 启动子进程
process = subprocess.Popen(['cmd.exe'])
# 获取子进程的句柄
handle = ctypes.windll.kernel32.OpenProcess(PROCESS_ALL_ACCESS, False, process.pid)
# 检查进程是否已经退出
while True:
# 获取进程的退出码
exit_code = ctypes.c_long()
ctypes.windll.kernel32.GetExitCodeProcess(handle, ctypes.byref(exit_code))
# 如果进程还在运行,显示进程ID
if exit_code.value == STILL_ACTIVE:
print("Process is still running with pid:", process.pid)
# 如果进程已经退出,显示退出码
else:
print("Process has exited with exit code:", exit_code.value)
break
# 关闭进程句柄
ctypes.windll.kernel32.CloseHandle(handle)
在上面的例子中,我们使用subprocess.Popen启动了一个基本的cmd.exe子进程,并使用ctypes.windll.kernel32.OpenProcess获得了子进程的句柄。
然后,我们在一个循环中使用ctypes.windll.kernel32.GetExitCodeProcess获得进程的退出码。如果退出码为STILL_ACTIVE,表示进程还在运行,我们将显示进程的ID。
如果退出码不等于STILL_ACTIVE,表示进程已经退出,我们将显示退出码,并跳出循环。
最后,我们使用ctypes.windll.kernel32.CloseHandle关闭进程句柄。
这是一个简单使用GetExitCodeProcess()方法来检查子进程退出码的例子。你可以根据自己的需求进行修改和扩展。
