다음을 고려하세요:
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를 받게 됩니다.