내가 읽고있다rpi에 관한 이 질문에 관해서그리고 다음과 같은 생각을 하게 만드는 흥미로운 문구를 발견했습니다.
mkfifo tcp.stream
nc -l -p 1234 > tcp.stream | omxplayer --live tcp.stream
io 리디렉션에 유의하세요. STDOUT이 두 번 리디렉션되었습니다! 내 관심사는 사용 가능한 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