- Notifications
You must be signed in to change notification settings - Fork95
Open
Labels
Description
文中说到terminate会立即杀死进程,但是输出如下下方的图,在p.terminate()之后,输出进程p.is_alive()返回了True,也就是进程还活着,但是在p.join()之后,再次输出p进程的状态却死了,经过自己尝试,terminate确实会立即去杀死进程,但是在主进程执行到p.is_alive()的时候p尚未被杀死所以导致了返回了True。看文章的时候我以为是和后面的join有关,后面尝试在terminate之后执行time.sleep(),发现与join并无关联。具体代码如下:
importmultiprocessingfrommultiprocessing.dummyimportProcessimporttimedeffoo():print("Starting func")time.sleep(0.1)if__name__=="__main__":p=multiprocessing.Process(target=foo)print("Process before excution:",p,p.is_alive())p.start()print("Process running :",p.is_alive())p.terminate()time.sleep(0.1)# 如果没有这一行,下面一行的代码可能会返回Trueprint("Process terminated:" ,p.is_alive())# process is alivep.join()print("Process joined:",p.is_alive())# process is dead