재시도를 통해 스트림을 두 개의 바이너리로 분할하는 방법은 무엇입니까?

재시도를 통해 스트림을 두 개의 바이너리로 분할하는 방법은 무엇입니까?

s16le 형식의 오디오 스트림을 생성하는 바이너리 파일이 있습니다. 이 스트림을 두 개의 서로 다른 프로세스로 분할하고 싶지만 프로세스 2에 오류가 발생하면 명령이 프로세스 1을 종료하고 중단하는 것을 원하지 않습니다. 기본적으로 내가 원하는 것은 다음과 같습니다.

$ ./input | tee >(process_1) | process_2

프로세스 2가 종료되지 않으면 다시 시작하고 싶습니다. 기본적으로 process_2가 종료되면 파이프 신호가 전파될 때 전체 명령이 종료됩니다.

신호를 명시적으로 처리하고 자체 논리를 작성하여 C에서 이 작업을 수행할 수 있다는 것을 알고 있지만 기본 bash를 사용하여 신호를 포착/처리하고 명령 자체를 중단하지 않고 다운스트림 프로세스를 다시 시작하는 더 좋은 방법이 있는지 궁금합니다.

이 예에서는 녹음과 네트워크 스트림 간에 오디오 데이터를 분할합니다.

get_audio | tee >(./recorder) | ffmpeg -i pipe: ...

여기서 문제는 IceCast에 대한 ffmpeg의 연결이 중단되면 전체 명령이 종료되지만 이전 프로세스는 중단 없이 계속 녹음하기를 원한다는 것입니다.

관련 정보