我正在使用subprocess.Popen
来执行tcpdump,它可以在我的代码中正确收集包信息。
之后,我想使用os.kill(pid, signal.SIGKILL)
通过另一个线程杀死tcpdump,然后记录相关的数据包统计信息。
一般情况下,我想在bash中运行tcpdump时获取统计信息:
我按以下格式尝试了cmd:
proc=subprocess.Popen(shlex.split(tcpdump_cmd),
stdouot=subprocess.PIPE,
stderr=subprocess.PIPE)
然而,在proc.pid
杀死proc.stdout/stderr.readline()
之后,我未能获得统计数据
我也尝试过使用:
fcntl.fcntl(fd.fileno().fcntl.F_SETFL,
(fcntl.fcntl(fd.fileno.F_GETFL) | os.O_NDELAY | os.O_NONBLOCK))
他们都不能按我的预期输出统计数据。
另外,我尝试了shell=True
和shell=false
- 结果相同。
有没有办法实现这一目标? 谢谢!
P.S。我发现有一些与tcpdump相关的主题,不幸的是,据我所知,我没有发现他们可以在这个问题上帮助我。
答案 0 :(得分:2)
你是如何杀死这个过程的?
如果这是UN * X,那么:
如果这是Windows(因此您正在使用WinDump),您可能无法终止它,从而使其有机会打印统计信息。