有没有办法计算非终止输入源的行数?例如,我想运行以下一段时间来统计请求数:
ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | wc
Run Code Online (Sandbox Code Playgroud)
显然,这是行不通的。当我Ctrl+C杀死它时,我不会从wc. 如果可以,我宁愿避免创建文件。
从终端输入Ctrl+C发送SIGINT到前台进程组。如果你想wc在这个事件中幸存下来并产生输出,你需要让它忽略信号。
解决方案是wc在子shell 中运行,并SIGINT在运行之前将其父shell 设置为忽略wc。 wc将继承此设置并且在SIGINT发送到进程组时不会死亡。管道的其余部分将死亡,wc从另一端没有进程的管道中读取数据。这将导致在管道wc上看到EOF,然后它将输出其计数并退出。
ngrep -W byline port 80 and dst host 1.2.3.4 | grep ":80" | (trap '' INT ; wc)
Run Code Online (Sandbox Code Playgroud)