2016-11-10 4 views
2

Мне нужно найти pid proccess, запущенного в скрипте bash с другой программой. Я использую sshpass для ввода пароля, sshpass start ssh client и этот клиент открывает sshtunnel на сервер. Здесь вы примеры:получить pid процесса в подпроцессе 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, но это возможно получить PID запущенного sshclient?

ответ

0

Просто позвоните sshpass непосредственно с Popen и перейдите в опцию shell=False. Тогда прямым ребенком будет подпроцесс sshpass. Нет необходимости в оболочке оболочки.

+0

Благодарим за недобросовестных ребят, если я это сделаю, я получаю sshpass PID, но возможно ли получить PID sshclient proccess, который порожден sshpass proccess? –

1

По умолчанию proc.pid вернет PID оболочки (т.е. родительский процесс). То, что вы ищете, это PID дочернего процесса (sshpass).

Таким образом, shell=False в subprocess.Popen. Documentation is here.

0

Использование subprocess.Popen Я бы просто позвонил в shell=false.

Смежные вопросы