`sudo su`에 전달된 Heredoc에서 실행 중인 하위 셸에서 시작된 백그라운드 프로세스에서 PID를 캡처할 수 없습니다.

`sudo su`에 전달된 Heredoc에서 실행 중인 하위 셸에서 시작된 백그라운드 프로세스에서 PID를 캡처할 수 없습니다.

프로세스가 올바르게 시작되었는지 확인할 수 있도록 서브셸에서 시작된 프로세스의 PID를 캡처하려고 합니다. 해당 프로세스는 퓨마 응용 프로그램입니다.

sudo su - $APPUSER <<-BASH
    PID="\$(bundle exec puma -C config/puma.rb)"

    "\$(bundle exec puma -C config/puma.rb & export PID=$1)"

    "\$(bundle exec puma -C config/puma.rb &)"

    PID="\$(ps aux | grep \"[p]uma.*[u]nix.*$APPNAME\" | awk '{ print \$2}')"
BASH

이상한 점은 아무것도 반환하지 않는다는 것입니다. 주변 환경 없이 이 중 하나를 수행하면 ""다음 오류가 발생합니다.

-bash: line 22: [26740]: command not found

에 있는 숫자 []는 pid입니다. 스크립트를 다시 실행하면 다음과 같은 결과가 나오므로 이를 알 수 있습니다(pid가 존재하는지 확인합니다).

app is running with pid: 26740

나는 heredoc에서 명령을 실행하고 명령을 전달하기 때문에 이런 일이 발생한다고 생각합니다.sudo su

서브쉘에서 시작된 백그라운드 프로세스에서 pid를 얻는 방법.

답변1

내부 PID값을 재정의할 수 없습니다. 소문자 환경 변수를 사용하십시오.

관련 정보