s16le 형식의 오디오 스트림을 생성하는 바이너리 파일이 있습니다. 이 스트림을 두 개의 서로 다른 프로세스로 분할하고 싶지만 프로세스 2에 오류가 발생하면 명령이 프로세스 1을 종료하고 중단하는 것을 원하지 않습니다. 기본적으로 내가 원하는 것은 다음과 같습니다.
$ ./input | tee >(process_1) | process_2
프로세스 2가 종료되지 않으면 다시 시작하고 싶습니다. 기본적으로 process_2가 종료되면 파이프 신호가 전파될 때 전체 명령이 종료됩니다.
신호를 명시적으로 처리하고 자체 논리를 작성하여 C에서 이 작업을 수행할 수 있다는 것을 알고 있지만 기본 bash를 사용하여 신호를 포착/처리하고 명령 자체를 중단하지 않고 다운스트림 프로세스를 다시 시작하는 더 좋은 방법이 있는지 궁금합니다.
이 예에서는 녹음과 네트워크 스트림 간에 오디오 데이터를 분할합니다.
get_audio | tee >(./recorder) | ffmpeg -i pipe: ...
여기서 문제는 IceCast에 대한 ffmpeg의 연결이 중단되면 전체 명령이 종료되지만 이전 프로세스는 중단 없이 계속 녹음하기를 원한다는 것입니다.