Linux
如何在多個程序之間共享標準輸出?
我想接收實時 TCP 流,並使其同時被另一個程序讀取,而不保存它。
例如,111.222.233.244:1234 流式傳輸實際時間。伺服器只支持一個連接。
TTY1:
$ nc 111.222.233.244 1234 | (do something here) /tmp/tcpstream & $ sleep 5 # stream is received even if there is no process that reads it $ cat /tmp/tcpstream # it can also be like `(some command) | cat -` 17:00:06 17:00:07 17:00:08 17:00:09 17:00:10 17:00:11
TTY2(第二次
cat
在執行後 9 秒執行nc
):$ cat /tmp/tcpstream 17:00:09 17:00:10 17:00:11
也許tcpclone工具可以幫助你。它偵聽某個埠上的傳入連接,並且從標準輸入讀取的任何數據都將轉發到這些連接。
你的例子應該變成這樣:
$ nc 111.222.233.244 1234 | ./tcpclone 5555 & $ nc 127.0.0.1 5555
我不確定我是否完全理解您的問題,但是如何:
$ nc 111.222.233.244 1234 \ | tee -a /tmp/stream.dump \ | while ! do_something_here; do : ; done
除了明顯地將流轉儲到文件中
tee
(附加,因為網路可能由於各種原因而斷開連接,您可能不一定要覆蓋流的前一部分),do_somehing_here
除非它正確退出,否則它將重新生成。因此,do_somehing_here
例如,如果是包裝腳本,您可以殺死它實際呼叫的任何內容,這會使腳本異常退出並立即重新生成。如果在殺死腳本之前編輯腳本,則無需重新連接即可更改流的處理。