Как получить pid подпроцесса в сценарии ожидаемой оболочки после появления - PullRequest
5 голосов
/ 13 февраля 2012

Часть скрипта a.exp :

#!/usr/bin/expect
# ..... 
spawn ssh -qTfnN -D $port $user@$host
expect "*assword:*"
# .....

Как я могу получить pid подпроцесса "ssh".

Если я выполню их в оболочке bash, а не в файле сценария, результат будет

expect1.1> spawn ssh name@host
spawn ssh name@host
2188
expect1.2> 

2188 - это идентификатор подпроцесса.

А как использовать команду exp_pid в ожидаемой оболочке?

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

Я думаю, что вы ищете что-то вроде этого:

spawn ssh name@host
set pid [exp_pid]
puts "PID: $pid"
2 голосов
/ 18 октября 2018

Эта справочная страница говорит:

spawn возвращает идентификатор процесса UNIX.Если процесс не запущен, возвращается 0.

Т.е. вы можете сделать:

set pid [spawn ssh -qTfnN -D $port $user@$host]

Вы также можете использовать exp_pid, как jcollado продемонстрировано .Эта же страница руководства объясняет, что:

exp_pid [-i spawn_id]возвращает идентификатор процесса, соответствующий текущему процессу.Если используется флаг -i, возвращаемый pid соответствует идентификатору данного spawn id.

...