Python Start&通过线程停止长时间运行程序

时间:2015-07-06 12:34:48

标签: python multithreading

我的环境是Python + Linux

我有一个可以从命令行运行的程序。用户按ctrl + c运行后,它会将一些数据保存在输出文件中(在我的情况下,程序为tcpdump,并在用户按ctrl + c)后将嗅探包存储在pcap文件中。没有Ctrl + C程序不会退出/停止。

我通过线程运行这个程序tcpdump,经过一些操作后我必须停止线程并收集pcap文件。

我的代码:

class MyClass(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.process = None
        self.stdout = None
        self.stderr = None
    def run(self):
        print '[+] Starting Sniffer at : ',Interface
        cmd = 'tcpdump -i lo tcp port 8080 -w hello.pcap'
        p = subprocess.Popen(cmd.split(),shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        self.stdout, self.stderr = p.communicate()
    def stop(self):
        print "[+] Trying to stop the sniffer thread.."
        if self.process is not None:
            self.process.terminate()
            self.process = None
        print '[+]  Thread stopped'

s = MyClass()
s.start()
#some operation 
s.stop()
# some opes

我遇到的问题我得到空的pcap文件。我想可能是因为以下问题之一,它正在发生

  1. 也许是因为没有ctrl + C它不会将输出保存到pcap文件中。有没有解决方案/黑客,强行保存这个?

  2. 我认为,即使在执行s.stop()之后线程也没有停止。我已经使用s.is_alive()确认了这一点。我在s.start()和s.stop()之前和之后得到 True

  3. 谢谢,

0 个答案:

没有答案