私が読んでいるrpiに関するこの質問についてそして、次のような考えをさせる興味深いフレーズを発見しました。
mkfifo tcp.stream
nc -l -p 1234 > tcp.stream | omxplayer --live tcp.stream
ioリダイレクトに注意してください。 STDOUTが2回リダイレクトされました!私の興味は、利用可能なSTDINに関連付けられていないomxplayerが制御するのが少し難しいかもしれないということです。しかし、これはomxplayerが終了したときにSIGPIPEを使用してncを終了するという利点があると思います。これは良い考えですか?奇妙な状況でお勧めですか?
答え1
nc
パイプの一端がすぐに閉じます。omxplayer
チップはnc
fifo(パイプではない)に書き込むとSIGPIPEを受け取ります。
標準入力で制御を維持するnc
ためにバックグラウンドで実行するのが最善です。omxplayer
mkfifo tcp.stream
nc -l -p 1234 > tcp.stream &
omxplayer --live tcp.stream
ただし、シェルのジョブ制御の観点から代わりに使用することは実際には意味があります|
。&
使用|
:
$ mkfifo fifo
$ nc -l -p 1234 >fifo | cat fifo
nc
cat
同じプロセスグループ(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
Ctrlユーザーが+を入力すると、すべてSIGINTを受信して終了しますC。
使用&
:
$ mkfifo fifo
$ nc -l -p 1234 >fifo & cat fifo
[1] 9183
nc
cat
異なるプロセスグループ(PGID 9183と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
cat
この場合、Ctrlユーザーが+を入力すると、フォアグラウンドプロセス()のみがSIGINTを受け取りますC。まだ接続されていない場合は、nc
バックグラウンドで実行され続けます。
^C
$ jobs
[1]+ Running nc -l -p 1234 > fifo &
$ kill %
[1]+ Terminated nc -l -p 1234 > fifo