python 中的终止子进程不起作用

Terminate subprocess in python doesn't work

我想终止一个子进程,但它不起作用。这是我的代码:

import os
import subprocess

p = subprocess.Popen(['gnome-terminal','-e','tshark -i eth0 -w /root/Desktop/test.pcap'])
q = subprocess.Popen(['python','avtp2.py'])

if q.wait() == 0:
  p.terminate()

你知道为什么吗?

问候

来自文档:

Popen.wait()

Wait for child process to terminate. Set and return returncode attribute.

所以对于 运行 的 if 主体,进程必须先终止,您可以使用 q.poll() 代替,因为它不会阻塞。

这个有效:

import os
import subprocess
from subprocess import check_output
import signal

p = subprocess.Popen(['gnome-terminal','-e','tshark -i eth0 -w /root/Desktop/test.pcap'],shell=False)
q = subprocess.Popen(['python','avtp2.py'])

if q.wait() == 0:
  p_pid = check_output(["pidof","tshark"]).split()
  os.kill(int(p_pid[0]), signal.SIGINT)