0
我有一個腳本,應該(除其他外)打開一個新的終端窗口並在該終端中運行TCPDUMP。然後該腳本等待用戶在原始窗口中發出他們已完成的提示(提示等待'y')。在用戶輸入'y'的時候,我需要終止TCPDUMP終端窗口。這裏是設置:殺死由subprocess.Popen(Python)產生的終端/ 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
,但沒有運氣。
在運行Python腳本和衍生終端的終端中運行'xprop _NET_WM_PID'返回相同的PID。看起來'xcfe4-terminal'足夠聰明,可以在同一個進程下運行新的實例。所以我想我必須弄清楚如何確定TCPDUMP命令的PID。 –