简体   繁体   中英

python Popen: How do I stop(kill) the subprocess that created using Popen?

I need to stop the service(runs at the background in another thread) that I issued through Popen in python after I got the result, but the following approach failed(just use ping for the sake of explanation):

class sample(threading.Thread):
  def __init__(self, command, queue):
    threading.Thread.__init__(self)
    self.command = command;
    self.queue = queue

  def run(self):
    result = Popen(self.command, shell=True, stdout=PIPE, stderr=STDOUT)    
    while True:
      output = result.stdout.readline()
      if not self.queue.empty():
        result.kill()
        break
      if output != "": 
        print output
      else:
        break

def main():
  q = Queue()
  command = sample("ping 127.0.0.1", q)
  command.start()
  time.sleep(10)
  q.put("stop!")
  command.join()

if __name__ == "__main__":
  main()

After running above program, when I pgrep for ping , it's still there. How can I kill the subprocess opened by Popen? Thanks.

PS: I also tried result.terminate(), but doesn't really solve the problem either.

You don't really need to run a subprocess from a thread. Try running the subprocess without a thread. Also, you specified shell=True, so it's running the command in a shell. So there are two new processes, the shell and the command. You can also remove the shell by making shell=False.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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