我正在使用
popen()
在 Python 中创建可能长时间运行的进程。 如果父程序死掉然后重新启动,有没有办法检索之前创建的仍在运行的进程? 我可能必须使用 start_new_session=True
,但我现在不这样做。
本质上,我想获得一个指向子进程的
popen
对象的重新构造实例。 我怀疑这是不可能的,因为序列化 popen()
对象似乎是不可能的。
首先,如果与管道连接的进程之一死亡,则对该管道的任何读/写操作都将导致
SIGPIPE
——默认情况下会终止该进程。因此,如果父进程崩溃,您的孤儿进程也很可能立即死亡。
根据 我可以与 linux 上的另一个进程共享文件描述符还是它们是该进程的本地进程?,只能通过 UNIX 域套接字在不相关的进程之间共享文件描述符,并且这需要两个进程的积极参与.
正如其他人指出的那样,您也无法
wait
完成该过程。
根据您想要实现的目标(例如,这是一个工作进程,您不想失去其进度),更好的方法是例如在某些点保存进度(无论是由父项还是子项)并添加从保存的状态重新启动的功能。