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