import os
import time
defloop_print():
import time
import signal
prctl.set_pdeathsig(signal.SIGTERM)
whileTrue:
print("child alive, %s" % time.time())
time.sleep(1)
try:
pid = os.fork()
except OSError:
if pid != 0: # parentprint("parent sleep for 2")
time.sleep(2)
print("parent quit")
else:
loop_print()
这次我们看到,在父进程退出的同时,子进程也退出了。
parent sleep for 2child alive, 1539676057.5094635child alive, 1539676058.5105338parent quit
缺点:只支持 linux
父进程在终止的时候回收子进程
可以使用
atexit.register
在主进程中注册代码:
# pip install psutilimport psutil
import atexit
import os
import signal
@atexit.registerdefkill_children():
print("quitting, press Ctrl-C to force quit")