예상되는 프로세스에서 PID를 얻는 방법은 무엇입니까?

예상되는 프로세스에서 PID를 얻는 방법은 무엇입니까?

예: 쉘 스크립트에서 다음을 사용하여 SSH 터널을 엽니다.

/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

이제 $SSH_PID에는 숫자가 있지만 생성된 SSH의 PID는 아닙니다. 나는 성공하지 못한 채 다양한 방법을 시도했습니다. 어떤 아이디어가 있나요?

답변1

종료 상태는 8비트 정수이므로(대부분의 쉘(ksh93은 예외)은 신호를 받은 프로세스에 비트 8을 사용하기 때문에 이를 7비트로 자릅니다.) 따라서 pid가 0에서 127 사이인 경우에만 유효합니다. 종료 상태 대신 파이프에서:

SSH_PID=$(
expect <<EOD
...
spawn -noecho ssh ...
puts [exp_pid]
...
EOF
)

관련 정보