繁体   English   中英

杀死由subprocess.Popen(Python)生成的Terminal / tcpdump

[英]Kill Terminal/tcpdump spawned by subprocess.Popen (Python)

我有一个脚本,该脚本应该(除其他事项外)打开一个新的终端窗口并在该终端中运行TCPDUMP。 然后,脚本会在原始窗口中等待用户发信号表示已完成操作(提示等待“ y”)。 在用户输入“ y”时,我需要终止TCPDUMP终端窗口。 这是设置:

tcp_dump_line = "\"/usr/sbin/tcpdump -nn -tttt -i " + nic
tcp_dump_line += " 'not (host ::1 and tcp and port 5432) and not (host ::1"
tcp_dump_line += " and udp and port 44954) and not (host ::1 and tcp and "
tcp_dump_line += "port 4101) and not (host 127.0.0.1 and tcp and "
tcp_dump_line += "port 4101)'\""
command = ['xfce4-terminal', '-e', tcp_dump_line,
          '-T', 'TCPDUMP']
print "[*] tcpdump command: " + ' '.join(command)

proc1 = subprocess.Popen(' '.join(command), shell=True)
running_procs.append(proc1)

这样就一切正常了。 在程序出口,我运行:

def kill_procs(running_procs):
    '''Kill processes spawned by this scripts.'''
    print "[*] Killing all startop spawned processes"
    for p in running_procs:
        print "[+] Killing PID: " + str(p.pid)
        p.kill()

这适用于我产生的其他进程,但它们是直接程序,而不是新的终端。 通过跟踪PID可以收集到的信息,新的终端是由运行Python脚本的终端的PID生成的,而不是由Python实例本身的PID生成的。 因此,在打开新的终端窗口之后,写入running_procs的PID似乎消失了,因此无法杀死已生成的终端。

知道如何退出生成的终端/命令吗? 我也尝试过没有shell=True没有运气。

最终更容易使用OS命令来解决此问题。 由于新终端的标题设置为TCPDUMP我可以使用pidof来实现。

tcpdump_pids = subprocess.check_output(['pidof', 'tcpdump']).split()
for pid in tcpdump_pids:
    print "[+] Killing PID: " + pid
    os.kill(int(pid), signal.SIGKILL)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM