usando pipe para executar o comando em segundo plano

4

Eu estava lendo essa pergunta no rpi e notei uma linha interessante que me fez pensar:

mkfifo tcp.stream
nc -l -p 1234 > tcp.stream | omxplayer --live tcp.stream

Observe o redirecionamento de io. STDOUT é redirecionado duas vezes! Minha preocupação é que o omxplayer não ter STDIN associado a nada usável pode ser um pouco difícil de controlar, mas acho que isso tem a vantagem de matar o nc com o SIGPIPE quando o omxplayer sai. isso é uma boa ideia? Isso é algo que vale a pena recomendar em alguns casos estranhos?

    
por hildred 05.07.2015 / 02:44

1 resposta

6

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
    
por 05.07.2015 / 05:22