![여러 프로세스 대체에서 $!를 추출합니다.](https://linux55.com/image/188180/%EC%97%AC%EB%9F%AC%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EB%8C%80%EC%B2%B4%EC%97%90%EC%84%9C%20%24!%EB%A5%BC%20%EC%B6%94%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음을 고려하세요:
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를 받게 됩니다.