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.
pslook like?