全部,
我用-z选项连续运行tcpdump(使tcpdump运行“命令文件”,其中文件是每次旋转后关闭的保存文件),这种方式:
tcpdump -G 1 -w /tmp/%Y-%m-%d_%H:%M:%S.pcap -z add-file -C 3
当“ add-file”是以下python代码时:
if __name__ == "__main__":
from my_modules import cli_add_tcpdump_file
import os
import sys
pid = os.fork()
if pid == 0:
cli_add_tcpdump_file()
sys.exit(0)
else:
sys.exit(0)
问题是一段时间后(通常在运行代码的计算机上出现一些负载高峰之后),会创建许多僵尸添加文件进程。僵尸进程运行不到一分钟并消失,但是新的僵尸进程会立即创建,并且其数量会随着时间的增长而增长。 尽管add-file使用os.fork()并且它的父进程应该立即退出并且子进程应该被清理并且父pid为1,但这种情况还是会发生。 该机器运行debian 8。 您是否有任何建议可以改进tcpdump生成附加文件进程而不创建僵尸的过程(偶尔重新启动tcpdump会删除所有僵尸,但看起来并不像解决方案)? 预先感谢,
def add_tcpdump_file(fname):
import time
from my_modules import save_file
save_file(ts_begin=time.time(),fname=fname)
def cli_add_tcpdump_file():
import argparse
arg_parser = argparse.ArgumentParser(description="Add file to db.")
arg_parser.add_argument('fname', help='Capture file name.')
args = arg_parser.parse_args()
add_tcpdump_file(args.fname)
save_file-是一个标准的DJANGO ORM函数,它添加了以下模型的实例:
class TCPDumpFile(models.Model):
id = models.AutoField(primary_key=True)
ts_begin = models.DecimalField()
fname = CharNullField()
def save_file(**kwargs):
TCPDumpFile(**kwargs).save()