tcpdump创建僵尸进程

时间:2018-06-24 07:24:37

标签: python-2.7 tcpdump debian-jessie

全部, 我用-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会删除所有僵尸,但看起来并不像解决方案)? 预先感谢,

Veronika

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()

0 个答案:

没有答案