我有一个 python 脚本,它调用这样的子进程
process = subprocess.Popen('python', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
上面的代码将在现有的 python 执行中打开一个 python 解释器。我想要做的是:当我关闭主 python 执行并重新启动它时,我希望前一个子进程自行继续。我知道这是可能的,因为当我print(process)
说subprocess object created at <0x00123abc>
是否可以通过保存它的状态来恢复这个对象?
一般来说没有。当父进程死亡时,子进程的所有权被赋予 init (1),但不可能再从 init 重新获得所有权。也无法重新获得 io 通道。
您最好的选择是使用 screen - 假设您使用的是基于 Unix 的系统。它在 Windows 上没有帮助。Screen 有一个巧妙的方法来绕过这个限制,通过创建一个守护进程来实际执行你的进程并将它的 IO 传递给你。当您的屏幕“gui”退出时,守护进程继续运行,并且子进程(在本例中为 python 解释器)保持活动状态并继续与守护进程通信,因为它认为它是控制台。然后,您可以使用不同的 screen 命令从不同的 shell/进程重新附加到此守护程序。
这是我们必须用来在 80x24 ANSI 终端上保持会话活动的恐龙技巧,但它仍然有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句