2016-08-19 10 views
0

socat을 사용하여 포트의 stdin에서 데이터를 게시합니다. 간단히 :포크 옵션을 사용하는 동안 STDIN EOF에서 socat - terminate

some_process | socat -u - tcp-listen:8888,reuseaddr,fork 

나는 파이프 라인이 왕래 포트 8888에 독자, 따라서 포크 옵션으로 살아 남기 위해 싶지만 또한 some_process 경우 다이를 종료 socat 를 원한다. 이 경우에도 현재 살아 있습니다.

간단한 테스트 케이스는 (pstree 통해)이 프로세스 트리를 제공

while : ; do echo 1; sleep 1; done | socat -u - tcp-listen:8888,reuseaddr,fork 

:

bash─┬─bash───sleep 
    └─socat 

I는 (어느 것이 while 루프를 실행)를 제 떠들썩한 파티 죽일 경우 I 얻을 : 나는 socat 종료 루게릭 병을 갖고 싶어

bash───socat 

영형. 내가 원하는 것은 가능한가?

답변

0

내 자신의 질문에 대답하기 위해 내가 원하는 것은 불가능합니다.

옵션 : 문서 (xio.help)에서

포크없이

포크 (0 = 포크), 청취 과정은 정확히 하나의 연결을 허용하고, 이후에 종료됩니다. 포크 세트를 사용하면 수신 연결마다새 socat 하위 프로세스를 포크합니다.

부모 프로세스는 이 외부에서 종료 될 때까지 accept() 및 fork() 호출의 루프에 남아 있습니다.

mkfifo /tmp/myfifo 
socat -u - tcp-listen:8888,reuseaddr,fork < /tmp/myfifo & 
socat_pid=$! 
some_process > /tmp/myfifo 
(some_process terminates for some reason) 
kill $socat_pid 
rm /tmp/myfifo 
:

은 내가 FIFO 내 두 프로세스를 연결하여 문제를 해결했다