%20%E4%BB%8E%E6%9C%80%E5%88%9D%E4%B8%BA%E7%A9%BA%E7%9A%84%E5%91%BD%E5%90%8D%E7%AE%A1%E9%81%93%E8%AF%BB%E5%8F%96%E6%97%B6%E6%97%A0%E9%99%90%E6%9C%9F%E6%8C%82%E8%B5%B7.png)
我nc
像这样启动服务器:
nc -lk -p 12345 -s localhost < <named_pipe>
以及一位nc
客户:
nc localhost 12345
当我运行命令并且管道为空时,nc
挂起,这正是我所期望的。但是,即使我开始写入管道,例如:
watch -n 3 -t fortune > p
nc
仍在等待。
当我systrace
在服务器上运行时,我看到以下内容:
strace: Process <id> attached
restart_syscall(<... resuming interrupted read ...>
表示该进程正在等待读操作。
如果我对生产者进行系统跟踪,我可以看到对命名管道的持续写入。不清楚为什么当管道上有可用数据时服务器正在等待。
但是,如果我终止客户端并再次启动它,从而重新启动连接,一切都会正常工作。
系统信息:
OS: Ubuntu 20.04.6 LTS
BSD nc