Python subprocess.Popen获取分叉进程的进程的pid

时间:2011-02-14 19:20:40

标签: python popen pid

我正在启动一个ssh命令,它会自行解析,并且即使在脚本完成后也会运行。所以代码看起来像这样:

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作为一个进程并在脚本完成后运行 - 我需要获取该ssh进程的pid。上面的打印声明只会打印出Popen进程的pid。有什么建议吗?>

2 个答案:

答案 0 :(得分:1)

虽然您已将-f开关传递给ssh,但您的程序无法控制(并且不会通知)ssh程序本身执行的操作。您的程序没有直接方式来发现ssh已经分叉并找到第二个子pid。

然而,可能有间接的方式来获取此信息。您可以枚举活动进程并查找其ssh_proc.pid的进程。

答案 1 :(得分:0)

如果您使用:

shell=True

作为Popen命令的参数,你的pid将匹配正在运行的shell的pid而不是命令。只要进程不是守护进程并从终端中分离出来,你就应该能够通过添加进程来终止进程。(你必须将命令更改为NOT列表,而不是字符串。< / p>

这是在python文档中: http://docs.python.org/2/library/subprocess.html#subprocess.Popen.pid