我正在使用Python进程来运行我的一个函数:
Process1 = Process(target = someFunction)
Process1.start()
现在该函数没有循环或任何东西,它只是做它的事情,然后结束,进程死了吗?或者我总是需要放弃:
Process1.terminate()
此后?
答案 0 :(得分:2)
子进程将自行退出 - 在这方面Process1.terminate()
是不必要的。如果在子进程和父进程之间使用任何共享资源,则尤其如此。来自Python documentation:
避免终止流程
使用Process.terminate方法停止进程可能会导致进程当前使用的任何共享资源(如锁,信号量,管道和队列)被破坏或无法用于其他进程。
因此,最好只考虑在从不使用任何共享资源的进程上使用Process.terminate。
但是,如果您希望父进程等待以完成子进程(可能子进程正在修改父进程之后将访问的内容),那么您将要使用{ {1}}阻止父进程继续,直到子进程完成。当使用子进程来避免僵尸进程或孤儿时,这通常是一种很好的做法。
答案 1 :(得分:1)
不,as per the documentation它只会向相关流程发送SIGTERM
或TerminateProcess()
。如果它已经退出那么就没有什么可以终止的。
但是,在子流程中使用退出代码始终是一个很好的过程:
import sys
sys.exit(1)
然后在您知道流程已终止后再检查exit code:
if Process1.exitcode():
errorHandle()