[英]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.