怎样使用Python,在Windows下保证父进程退出时,子进程同样退出?

有两种办法,1.一种办法是在父进程fork出子进程的时候把子进程pid写入一个文件中,这种父进程捕捉到sigkill或者sighup信号的时候读取文件kill 子进程们的pid。2.还有一种方法就是子进程定时调用os.getppid()来判断是否自己已经成为了僵尸进程,如果是赶紧把事情做完正常结束掉。第一种方法暴力有效,第二种方法更加安全。按照unix设计哲学,进程是程序执行的最小单元,而他们是天生平等的,没有父进程权利就大一些就能剥夺子进程的生命周期,父进程没了,init进程就要喜当爹。所以你的问题的重点不在于父进程结束子进程,再于一个进程如何结束另一个进程,从这个角度(ipc)上去探索,方法还是很多的,发挥想象力吧。
■网友
我试着回答一下,例子写的不好,大概意思是这样的,仅供参考:第一个问题\u0026gt;\u0026gt;\u0026gt; import multiprocessing, time, signal\u0026gt;\u0026gt;\u0026gt; p = multiprocessing.Process(target=time.sleep, args=(1000,))\u0026gt;\u0026gt;\u0026gt; print p, p.is_alive()\u0026lt;Process(Process-1, initial)\u0026gt; False\u0026gt;\u0026gt;\u0026gt; p.start()\u0026gt;\u0026gt;\u0026gt; print p, p.is_alive()\u0026lt;Process(Process-1, started)\u0026gt; True\u0026gt;\u0026gt;\u0026gt; p.terminate()\u0026gt;\u0026gt;\u0026gt; time.sleep(0.1)\u0026gt;\u0026gt;\u0026gt; print p, p.is_alive()\u0026lt;Process(Process-1, stopped)\u0026gt; False\u0026gt;\u0026gt;\u0026gt; p.exitcode == -signal.SIGTERMTrue第二个问题daemon 【怎样使用Python,在Windows下保证父进程退出时,子进程同样退出?】 The process’s daemon flag, a Boolean value. This must be set before start() is called.
import multiprocessingimport timedef demo(): while True: time.sleep(10)if __name__ == \u0026#39;__main__\u0026#39;: multiprocessing.freeze_support() P = multiprocessing.Process(target=demo) P.daemon = True P.start()不过我倒是很好奇,主进程会因为一个线程的异常而导致退出么?这个好像是分两种情况。。。如果使用threading.thread(target=***)的方式,会导致主线程异常,不过如果是通过重载run方法。是没有问题的。期待大牛解答。


    推荐阅读