linux下的服务,一种现代的方法

Service under linux, a modern approach?

本文关键字:一种 方法 服务 linux      更新时间:2023-10-16

情况:侦听套接字的服务的一个小的新项目。

初步研究:这个答案是如何制作一个进程守护进程和答案中的链接:http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

很好,一切都很好。
现在,对于监听部分,我没有问题,但对于线程,我开始关注C++11规范。所以我包括:

#include <thread>

这很好,只需调用std::thread,我就可以在新连接上打开一个线程。

所以我只是想知道,fork部分在C++11中还不错吗?

有没有一种新的方法来构建Linux服务,或者操作方法仍然很好?

fork()从来不是任何C++标准的一部分,我也不认为它会成为其中的一部分。将服务作为多进程或多线程应用程序有某些好处和缺点。多进程的主要好处是恢复能力——一个服务处理程序中的崩溃不会影响另一个,而多线程应用程序中的故障会导致死亡。另一方面,与多进程应用程序相比,多线程应用程序有更多的相互通信方式(而且速度更快)。

选择权在你,但有一件事你永远不想做,那就是把叉子和线混合在一起。

fork在Linux上的任何语言中都能很好地工作。单独的进程与线程不同,但它们确实有一些共同点。

fork()对当前进程进行几乎相同的复制。包括它的所有文件句柄、内存映射、堆、堆栈等。但是,只有调用fork()的线程在子线程中运行。

新线程在同一进程中运行,并有可能访问其所有资源,包括堆、文件句柄、信号量等。这可能是一个争用问题,因为其他线程操作相同的资源可能会导致难以找到的行为。

守护进程只不过是一个从终端分离的进程,因此可以在发起用户注销后继续运行。据推测,它对写入错误(如写入日志)、感测输入、处理请求等做出了自己的安排。

相关文章: