我试图编写一个基本的多处理 tcp 服务器,它为每个新的 Accept() 分叉一个进程。
我不需要父进程等待子进程。我遇到了两种解决方案——分叉两次和守护进程。
- 两者有什么区别?
- 这种场景下哪个更合适呢?
- 在其中选择之一时需要考虑哪些因素?
有一个微妙的区别。
分叉两次:如果中间子进程已退出并已被父进程等待,则它不会成为僵尸进程。孙子也不能成为僵尸,因为它的父进程(中间子进程)已经退出,所以孙子是孤儿。孤儿(孙子)由 init 继承,如果它现在退出,系统有责任清理它。这样,父进程就不再需要等待收集子进程的退出状态信号,而父进程也可以忙于做其他工作。这也使得孩子能够长时间运行,这样短时间的父母就不需要等待那么长的时间。
Daemon:这适用于希望将自己与控制终端分离并作为系统守护进程在后台运行的程序。无控制终端。
方法的决定取决于当前的需求/场景。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)