2016-11-10 82 views
2

我需要找到在另一個程序中用bash腳本啓動的proc進程的pid。我使用sshpass輸入密碼,sshpass啓動ssh客戶端,並且該客戶端將sshtunnel打開到服務器。 這裏是例子:獲取子進程中的進程的Python python + bash

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

和我一起subrocess.Popen啓動:

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

腳本啓動就好了,一般完成並返回0,我可以得到它的PID,但有可能獲取啓動的sshclient的PID?

回答

0

只需撥打sshpass直接從Popen並通過shell=False選項。然後,直接的孩子將成爲sshpass子過程。不需要外殼包裝。

+0

感謝unswers傢伙,如果我這樣做,我得到sshpass PID,但它有可能得到sshclient進程的PID,由sshpass進程產生? –

1

默認情況下,proc.pid將返回shell的PID(即父進程)。你要找的是子進程的PID(sshpass)。

因此設置shell=Falsesubprocess.PopenDocumentation is here

0

使用subprocess.Popen我只需撥打shell=false選項。