Как остановить поток, который работает с ОС
Столкнулся со следующей проблемой. Разрабатываю систему автоматизированного тестирования. В ходе проведения теста мне нужно снять дамп. То есть в начале теста начал писать pcap, по окончанию перестал и сохранил.
Для снятия дампа создаю отдельный поток и флаг на остановку дампа
global still_dumping #The trigger to stop tcpdump.
still_dumping = False
if check_dump:
still_dumping = True
threading.Thread(target=dump(host_port)).start() # Make a thread for tcpdump.
def dump(host_port):
if not still_dumping:
os.system('killall -9 tcpdump')
return
os.system('tcpdump -w testDump.pcap -i lo0 port ' + str(host_port) + ' &')
Однако воткнулся что при попадании на tcpdump поток зависает, потому что ничего формально tcpdump не останавливает и соответственно на killall он никогда не попадает.
Прошу помочь советом как его выдернуть из tcpdump.
Ответы (1 шт):
Автор решения: Tim-Tam
→ Ссылка
Спасибо! Разобрался с suprocess и решил задачу через него.
Для следующих ищущих привожу сюда кусок кода
prc_dump = subprocess.Popen(['tcpdump', '-w', 'testDump.pcap', '-i', 'lo0', 'port', '8888'])
//Сделали что-то что нужно сделать
prc_dump.terminate() –