[英]NodeJS Kill Forever Running Child Process
我正在使用Wireshark的Tshark cmd工具捕获一些网络数据包并进行分析。 为了生成工作环境,您只需要Wireshark 3+和NodeJS 9+。 我正在使用以下代码在特定时间剪切Tshark流(setTimeout用于模拟用户同时单击“停止”按钮)
var spawn = require('child_process').spawn,
ts = spawn('tshark', ['-i', 'Wi-Fi', '-T', 'json']);
function analyzePacket(packet) {
console.log(packet.toString());
}
ts.stdout.on('data', function (packet) {
analyzePacket(packet)
});
setTimeout(function(){ ts.kill(); }, 5000);
但是,当ts.kill();
时,这很好用ts.kill();
被调用时,将包信息写入屏幕的中间被剪切。 我希望tshark完全输出在单击停止按钮(触发ts.kill())之前捕获的最后一个数据包。 据我所知,我尝试发送不同类型的信号,这些信号的杀伤性不同。 以下是:
ts.kill('SIGINT');
ts.kill('SIGHUP');
ts.kill('SIGKILL');
他们似乎都没有工作。 这是完全获得最终数据包,然后正常关闭的最佳方法。
tshark在捕获时将始终处于解析数据包的中间。 您实际上没有办法要求它在杀死它之前完成对数据包的解析。 如果希望它在某个条件后正常退出,则-a duration:NUM
将在NUM秒后停止,而-c NUM
将在NUM个数据包后停止。
如果您绝对需要用户按下“停止”按钮时进入的数据包,为什么不等收到信号后等待100毫秒再杀死呢? 这将捕获有问题的数据包,并且不会被用户注意到。
function killPocess(){
ts.kill();
}
function analyzePacket(packet) {
console.log(packet.toString());
killPocess(); // kill the process as packet is received
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.