在subprocesspython + bash中获得进程的pid

我需要find与另一个程序在bash脚本中启动的进程的PID。 我使用sshpass来input密码,sshpass启动ssh客户端,并在客户端打开sshtunnel到服务器。 这里是例子:

start_tunnel.sh #!/bin/bash exec sshpass -p 'passw' ssh -D :port user@$server -o StrictHostKeyChecking=no -f -N exit 

我用子subrocess.Popen启动它subrocess.Popen

 proc = subprocess.Popen('start_tunnel.sh') 

脚本启动正常,它通常完成并返回0,我可以得到它的PID,但是有可能得到启动sshclient的PID?

默认情况下, proc.pid将返回shell的PID(即父进程)。 你要找的是子进程的PID(sshpass)。

所以在subprocess.Popen设置shell=False 。 文档在这里 。

直接从sshpass调用sshpass并传入shell=False选项。 那么直接的孩子将成为sshpasssshpass 。 不需要壳包装。

使用subprocess.Popen我只是简单地调用shell=false选项。