여러 프로세스 대체에서 $!를 추출합니다.

여러 프로세스 대체에서 $!를 추출합니다.

다음을 고려하세요:

exec > >(tee -a mylog) 2> >(tee -a mylog >&2)
pspid=$!

tee위의 pid를 가진 프로세스는 무엇 입니까 $!?

위의 각 프로세스의 pid를 원한다면 tee어떻게 추출합니까?

答え1

$!비동기적으로 실행되는 마지막 파이프라인에서 가장 오른쪽 명령의 pid를 포함합니다. 여기서는 두 번만 실행하면 됩니다 exec.

exec > >(tee -a mylog)
out_pid=$!
exec 2> >(tee -a mylog >&2)
err_pid=$!

하지만 어쩌면 이러한 pid를 기록할 필요가 없을 수도 있습니다. tee스크립트(및 스크립트가 시작하는 모든 프로세스 및 쉘의 stdout/stderr)가 종료되면 해당 프로세스가 종료됩니다(eof가 표시될 때). 그 전에 죽이면 스크립트(또는 stdout/stderr를 이 파이프로 리디렉션하는 모든 프로세스)가 stdout/stderr에 무엇이든 쓰려고 하면 SIGPIPE를 받게 됩니다.

関連情報