You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Python子进程启动的二级进程Y.exe的PID?

如何获取X.exe启动的Y.exe的PID?

可以实现,核心思路是利用父子进程的关联关系——Y.exe是X.exe的子进程,因此它的父进程ID(PPID)会等于X.exe的PID。下面是两种可行方案:

方案一:使用psutil库(推荐)

psutil是Python的跨平台进程管理库,能轻松遍历系统进程并获取进程的父子关系。

  1. 先安装依赖:
pip install psutil
  1. 编写代码实现:
from subprocess import Popen
import psutil
import time

# 启动X.exe并记录其PID
x_process = Popen('D:\\X.exe')
x_pid = x_process.pid

# 等待Y.exe启动(根据实际启动耗时调整等待时间)
time.sleep(8)

# 遍历所有进程,筛选父PID为X.exe PID的Y.exe进程
for proc in psutil.process_iter(['pid', 'name', 'ppid']):
    try:
        proc_info = proc.info
        # 匹配父PID和进程名(如果Y.exe有固定名称的话)
        if proc_info['ppid'] == x_pid and proc_info['name'] == 'Y.exe':
            print(f"找到Y.exe的PID:{proc_info['pid']}")
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # 跳过无权限访问或已结束的进程
        continue

如果Y.exe的名称不固定,也可以只通过父PID筛选,再结合其他特征(比如进程路径)进一步确认,不过需要补充相关信息。

方案二:使用Windows原生命令(无需第三方库)

如果不想安装psutil,可以调用Windows的wmic命令查询子进程,再解析输出结果:

from subprocess import Popen, PIPE
import time

x_process = Popen('D:\\X.exe')
x_pid = x_process.pid

time.sleep(8)

# 调用wmic命令查询父PID为x_pid的进程
cmd = f'wmic process where parentprocessid={x_pid} get processid, name'
result = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True).stdout.read()

# 解析输出结果
lines = [line.strip() for line in result.split('\n') if line.strip()]
for line in lines[1:]:  # 跳过表头行
    pid, name = line.split()
    print(f"进程名:{name},PID:{pid}")

这种方法需要处理命令输出的格式,容错性不如psutil,但无需额外依赖。

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:20:42