我有一个Python脚本,用tcpdump
在subprocess
中捕获网络流量:
p = subprocess.Popen(['tcpdump', '-I', '-i', 'en1',
'-w', 'cap.pcap'], stdout=subprocess.PIPE)
time.sleep(10)
p.kill()
当这个脚本完成它的工作时,我试图在Wireshark中打开output.pcap
文件,得到一个错误:
"The capture file appears to have been cut short in the middle of a packet."
对于tcpdump
的subprocess
的“正确”关闭,可以采用什么解决方案?在
找到工作溶液:
我已将
p.kill()
改为p.terminate()
。在此更改之后,
subprocess
被“正确”完成(输出tcpdump
子进程,统计信息在控制台中可用),并且输出.pcap
文件没有损坏。在关于关闭
subprocess
es,我也有同样的问题。这个帖子真的很有帮助,所以谢谢你,尤其是https://stackoverflow.com/users/3583715/rkh。我的解决方案:在此之前:
在阅读了Popen文档之后:
^{pr2}$由于某些原因,调用}都不起作用,但是
output.kill()
,和/或output.terminate()
或发送{output.TerminateProcess()
起作用了。在代替
p.kill()
,可以使用p.send_signal(subprocess.signal.SIGTERM)
发送终止信号,而不是kill(p.terminate()
也这样做)。在Popen docs描述了
send_signal()
命令。关于信号的文档有点弱,但是(子流程信号)将列出您可能发送到进程的所有信号,但终止应该允许它有一些时间进行清理。在相关问题 更多 >
编程相关推荐