欢迎访问宙启技术站
智能推送

用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()方法来检查子进程退出码的例子。你可以根据自己的需求进行修改和扩展。