利用守护进程daemon实现心跳机制

背景:

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。

在Linux系统中,计算机刚启动时只有一个进程,PID为1,名字为init(centos6系统)或者systemd(centos7系统),systemd进程通过复制自身进程启动了其它进程,后面再复制出整个计算机进程,所以进程被设计成独立的,也就是说父进程关闭了,子进程照样能正常运行,这是非常必要的,不至于其中一个进程挂了,让它的子孙后代进程都挂掉。

但如果我们在主进程中开启一个子进程用于向远方服务器报告,这种进程间的独立就不符合我们的期望,而daemon参数可以实现主进程与子进程的绑定,主进程结束,守护进程的子进程也结束,如下

  1. from multiprocessing import Process
  2. import time
  3. def child_main():
  4. while True:
  5. print('i am live')
  6. time.sleep(3)
  7. if __name__ == '__main__':
  8. p = Process(target=child_main, daemon=True)
  9. p.start()
  10. time.sleep(10)
  11. print('main end')
  • 这里没有使用join()方法等待子进程,所以在运行10秒后主进程结束,
  • 由于参数daemon=True ,所以子进程在主进程结束后也跟着结束了。