我正在尝试连续监听端口5000并打印第一行消息,但程序在一次迭代后停止。我使用下面的命令-

nc -k -l 5000 | head -n 1

我在NC中使用了-k选项,但程序在一次迭代后仍然停止。这个命令有什么问题?

最佳答案

不是那么简单。第二个nc只能在前一个的完整运行之后启动。但它无法完成,因为nc有一个错误:它无法检测远程端是否关闭了它的套接字。因此,第一个NC从不停止,因此第二个NC无法启动。
nc的开发人员说,这是tcp协议固有的问题,我的意见是他们没有正确的看法(但这只是我的意见)。
如果您实际上想在TCP端口上执行脚本监听,一个有效的解决方案是将这个head -1放到脚本中,并从inetd调用这个脚本。
一些更棘手的黑客也可以工作,例如,杀死第一行之后的第一个nc,因此:

nc -k -l 5000|(read;echo $REPLY;killall -9 nc)

虽然这些工具非常有趣,但是对于生产环境来说,它们还不够稳定。:-)

关于linux - 即使使用-k选项,“nc”命令也会停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22782721/

10-13 07:25