基本上分叉意味着将当前流程的精确副本复制到另一个流程中直到分叉(对吗?这是我理解的方式,如果我错了,请纠正我)
所以,在GUI中,如果我将代码放到一个说按钮上,该按钮用于打开浏览器的进程,那么不应该将我当前的GUI窗口放到两个GUI窗口中吗?但结果只有一个。我的意思是制作两个GUI窗口,如果它将进程复制到分叉点,那么它是否也会复制窗口,因为它复制了所有代码?
最小的可运行代码在这里:
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
import webbrowser, os
class something(BoxLayout):
def __init__(self):
super().__init__()
self.add_widget(Button(text='test button'))
self.add_widget(Label(text='[ref=video]google.com[/ref]',
markup=True,
on_ref_press=lambda *_: self.open_browser('https://google.com')))
def open_browser(self, site):
if not os.fork():
webbrowser.open(site)
class MainApp(App):
def build(self):
return something()
if __name__ == '__main__':
MainApp().run()
由于某种原因,GUI在执行fork后变得没有响应,并且在完成分叉后没有两个GUI窗口。它背后的理论是什么?