linux下的服务,一种现代的方法
Service under linux, a modern approach?
情况:侦听套接字的服务的一个小的新项目。
初步研究:这个答案是如何制作一个进程守护进程和答案中的链接: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()
的线程在子线程中运行。
新线程在同一进程中运行,并有可能访问其所有资源,包括堆、文件句柄、信号量等。这可能是一个争用问题,因为其他线程操作相同的资源可能会导致难以找到的行为。
守护进程只不过是一个从终端分离的进程,因此可以在发起用户注销后继续运行。据推测,它对写入错误(如写入日志)、感测输入、处理请求等做出了自己的安排。
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 类中一种方法的部分专用化
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 有没有一种方法可以忽略Qt c++中的文件名大小写敏感性?
- 有没有一种方法可以使用图形在C++中逐个字母地打印控制台中的文本
- 有没有一种方法可以将数据从javascript发送到exe文件
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 有没有一种方法可以使用typedef中的参数名称
- C++中有没有一种方法可以通过指定列表中的每个成员变量来构造对象