在python中监视Popen进程

时间:2016-03-22 22:15:22

标签: python multithreading macos subprocess popen

我有一个函数可以启动一个在后台运行的命令,如下所示:

import subprocess
import threading
import time
import sys



def server():
    def launch_server():
        init = ['something']
        p = subprocess.Popen(init)
        while p.poll() is None:
            try:
                time.sleep(0.5)
            except KeyboardInterrupt:
                print ("Ctrl-c was requested")
                sys.exit(0)

            else:
            launch_server()
thread = threading.Thread(target=launch_server)
thread.start()
return

我使用poll()来知道它是否正在运行,并且我使用线程以便此函数不会阻止我的代码。现在,如果我使用init杀死killall init,则while循环可以重新启动init。但是,如果我按Ctrl-c,应用程序不会死亡。实际上,它重新启动,阻止这种情况的唯一方法是使用活动监视器(我在Mac OSX上)终止。我没有看到我的代码的try部分出现了什么问题。我应该补充一点,这是我第一次面对线程的使用(也许这就是问题?)。如果有人能告诉我错误是什么,我会很高兴。提前致谢。

更新

在@zondo评论之后,我发现解决这个问题很容易。我不得不补充道:

thread.daemon = True

thread.start()之前见the documentation here

0 个答案:

没有答案