Operating system 如何在os fork中保存线程?
我想检查在Operating system 如何在os fork中保存线程?,operating-system,multiprocess,Operating System,Multiprocess,我想检查在os.fork期间是否会保留线程。 这是在os.fork之前启动的线程 #!/usr/bin/env python # -*- coding: utf-8 -*- import os import multiprocessing from threading import Timer import time i = [0] def work(): while True: time.sleep(1) i[0] += 1 pri
os.fork
期间是否会保留线程。
这是在os.fork
之前启动的线程
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import multiprocessing
from threading import Timer
import time
i = [0]
def work():
while True:
time.sleep(1)
i[0] += 1
print i[0]
print multiprocessing.current_process()
if __name__ == '__main__':
task = Timer(1, work)
task.daemon = True
task.start()
time.sleep(2)
print 'pre fork'
if os.fork():
# parent process
else:
# child process
multiprocessing.current_process().name = "Secondary"
time.sleep(2)
print 'post fork'
time.sleep(1000)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import multiprocessing
from threading import Timer
import time
i = [0]
def work():
while True:
time.sleep(1)
i[0] += 1
print i[0]
print multiprocessing.current_process()
if __name__ == '__main__':
task = Timer(1, work)
task.daemon = True
time.sleep(2)
print 'pre fork'
if os.fork():
# parent process
task.start()
else:
# sub process
multiprocessing.current_process().name = "Secondary"
task.start()
time.sleep(2)
print 'post fork'
time.sleep(1000)
此程序的输出:
pre fork
1
<_MainProcess(MainProcess, started)>
2
<_MainProcess(MainProcess, started)>
post fork
post fork
3
<_MainProcess(MainProcess, started)>
4
<_MainProcess(MainProcess, started)>
5
<_MainProcess(MainProcess, started)>
6
<_MainProcess(MainProcess, started)>
7
<_MainProcess(MainProcess, started)>
输出如下:
pre fork
post fork
post fork
1
1
<_MainProcess(Secondary, started)>
<_MainProcess(MainProcess, started)>
2
2
<_MainProcess(MainProcess, started)>
<_MainProcess(Secondary, started)>
pre-fork
邮政叉
邮政叉
1.
1.
2.
2.
总结
- 似乎当我们在
之后启动线程时,一切都会正常,父进程和子进程都会运行线程os.fork
- 当我们在
之前启动线程时,根据输出,该线程似乎没有出现os.fork
,即它没有在子进程中执行os.fork
问题是这种情况应该如何发生以及原因是什么。突然,我想出了一个解释,答案是不,线程将不会在
os.fork期间保留
os.fork
仅在写入时进行复制李>
- 父进程和子进程都有相同的代码李>
- 然而,如果我们在
os.fork
之前启动一个线程,那么子进程就没有start
逻辑李>
- 所以,如果我们想在子进程中存在一个线程,那么我们只能在拥有
os.fork
it之后启动它李>
:)
注意:这与。