O pipe será imediatamente fechado no final de nc . Quando omxplayer dies nc receberá SIGPIPE escrevendo para o fifo, não para o pipe.
Pode ser melhor simplesmente executar nc em segundo plano para que você possa manter o controle sobre omxplayer via stdin.
mkfifo tcp.stream
nc -l -p 1234 > tcp.stream &
omxplayer --live tcp.stream
No entanto, usar | em vez de & faz sentido na visão do controle de trabalho do shell.
Usando | :
$ mkfifo fifo
$ nc -l -p 1234 >fifo | cat fifo
nc e cat pertencem ao mesmo grupo de processos (PGID 9177).
$ ps f -o pid,ppid,pgid,command
PID PPID PGID COMMAND
9095 1681 9095 bash
9179 9095 9179 \_ ps f -o pid,ppid,pgid,command
1691 1681 1691 bash
9177 1691 9177 \_ nc -l -p 1234
9178 1691 9177 \_ cat fifo
Ambos recebem SIGINT e saem quando o usuário digita Ctrl + C .
Usando & :
$ mkfifo fifo
$ nc -l -p 1234 >fifo & cat fifo
[1] 9183
nc e cat pertencem a grupos de processos diferentes (PGID 9183 e 9184).
$ ps f -o pid,ppid,pgid,command
PID PPID PGID COMMAND
9095 1681 9095 bash
9185 9095 9185 \_ ps f -o pid,ppid,pgid,command
1691 1681 1691 bash
9183 1691 9183 \_ nc -l -p 1234
9184 1691 9184 \_ cat fifo
Nesse caso, somente o processo de primeiro plano ( cat ) recebe SIGINT quando o usuário digita Ctrl + C . Se nc ainda não for conectado, ele continuará sendo executado em segundo plano.
^C
$ jobs
[1]+ Running nc -l -p 1234 > fifo &
$ kill %
[1]+ Terminated nc -l -p 1234 > fifo