我需要找到用另一个程序在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
开始:
这个脚本启动得很好,它通常会结束并返回0,我可以得到它的PID,但是有没有可能得到启动的sshclient的PID?在
使用
subprocess.Popen
我只需调用shell=false
选项。在只需直接从
Popen
调用sshpass
,并传入shell=False
选项。那么直接子进程将是sshpass
子进程。不需要外壳包装。在默认情况下,
proc.pid
将返回shell(即父进程)的PID。您需要的是子进程(sshpass)的PID。在所以在
subprocess.Popen
中设置shell=False
。Documentation is here。在相关问题 更多 >
编程相关推荐