tcpdump создает процессы зомби

Все, я запускаю tcpdump непрерывно с опцией -z (заставляет 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 ответов

Другие вопросы по тегам