在子进程python + bash中获取进程的pid

时间:2016-11-10 04:23:39

标签: python linux bash

我需要找到以另一个程序在bash脚本中启动的进程的pid。我使用sshpass输入密码,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开始:

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

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

3 个答案:

答案 0 :(得分:1)

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

所以在shell=False中设置subprocess.PopenDocumentation is here

答案 1 :(得分:0)

直接从sshpass致电Popen,然后传递shell=False选项。那么直接子将是sshpass子进程。不需要shell包装器。

答案 2 :(得分:0)

使用subprocess.Popen我只需调用shell=false选项即可。