Skip to main content
 首页 » 编程设计

Python subprocess.Popen 获取派生进程的进程的 pid

2025年05月04日8落叶无声

我正在启动一个 ssh 命令,该命令将自己 fork 出来,即使在脚本完成后也会运行。所以代码看起来像这样:

ssh_proc = Popen(['ssh', '-f', '-N', '-L', local_forward, local_user_host], stdin=PIPE, stdout=PIPE) 
print ssh_proc.pid 
stat = ssh_proc.poll() 

如您所见,ssh -f 将 ssh fork 为一个进程并在脚本完成后运行 - 我需要获取该 ssh 进程的 pid。上面的打印语句,只会打印出 Popen 进程的 pid。有什么建议吗?>

请您参考如下方法:

虽然您已将 -f 开关传递给 ssh,但您的程序无法控制(也未获悉)ssh 程序本身执行的事件。您的程序没有直接方法来发现 ssh 已经 fork 并找到第二个子 pid。

但是,可能有一种间接的方式来获取这些信息。您可以枚举事件进程并查找其parent 为ssh_proc.pid 的进程。