Como obter o PID de um processo gerado?

2

Exemplo: em um shell script eu abro um túnel SSH com este:

/usr/bin/expect <<EOD
set timeout -1
spawn ssh -fNL localhost:1873:localhost:873 HOST
expect "*?assword:" { send "$SSHPASS\r"}
sleep 2
exit [exp_pid]
EOD

export SSH_PID=$?
echo $SSH_PID

agora $ SSH_PID tem algum número, mas não é o PID do ssh gerado. Eu tentei diferentes maneiras que encontrei, mas não funcionou. Alguma idéia?

    
por Den 20.09.2012 / 04:58

1 resposta

2

O status de saída é de 8 bits (embora a maioria dos shells (exceção do ksh93) o truncará para 7 bits, já que usam o bit 8 para processos sinalizados), então ele só funcionará se o pid estiver entre 0 e 127. Get o pid de um pipe em vez do status de saída:

SSH_PID=$(
expect <<EOD
...
spawn -noecho ssh ...
puts [exp_pid]
...
EOF
)
    
por 20.09.2012 / 08:07