我正在启动一个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。有什么建议吗?>
答案 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