小编Mio*_*ios的帖子

编写一个linux守护进程

在Linux下编写/配置应用程序正确方法是什么,它始终运行并提供外部请求(TCP,数据库,文件系统,任何类型).

我特意不要调用这个守护进程,因为它可能意味着我不想在Linux环境中使用它.

我已经阅读了多个主题,包括:

Linux守护进程

编写linux守护进程的最佳方法

以不同用户身份运行Linux服务的最佳实践

但是没有一个能够充分比较使用哪种方法.

我看到以下选项:

  • 编写应用程序,分叉,调用setpid,umask等,但这需要应用程序自己执行许多步骤; (使用init.d自动启动?)
  • 使用daemon()init.d函数执行大部分这些步骤(但它可以移植到所有/许多Linux发行版)
  • 用&运行应用程序并相信它在后台运行

但是他们中哪一个是要走路.或者如果它们都可以使用,那么Linux中的守护进程是什么?

我正在寻找相当于在Windows下运行应用程序作为服务(任何.exe都可以自动生成使用sc作为服务运行).


我的要求如下:

  • 启动后启动(自动)
  • 作为特定用户(不是root)运行
  • 可以访问整个文件系统(/),但创建/修改文件作为运行应用程序的用户
  • 可以通过服务启动,服务停止来控制
  • 崩溃或杀死后可能会自动重启
  • 可以写入syslog
  • 在RHEL7下运行

我是应用程序的作者,但不希望改变它以处理守护进程.

我的猜测是编写自定义init.d脚本,然后从/etc/init.d/functions调用daemon()函数.我对吗?

c linux daemon rhel

3
推荐指数
1
解决办法
1289
查看次数

C++ - 函数结束和本地销毁顺序

我有以下代码:

class Class
{
public:
    std::string Read()
    {
        std::lock_guard<std::mutex> lock(mutex_);
        return data_;
    }

private:
    std::mutex mutex_;
    std::string data_;
};
Run Code Online (Sandbox Code Playgroud)

首先执行什么 - data_由于函数的原因,是否会在堆栈上创建字符串的本地副本(临时),然后锁将释放互斥锁,还是以其他方式?

如果是这样,以下行是否解决了问题?

return std::string(data_);
Run Code Online (Sandbox Code Playgroud)

Mutex应该保护并发读/写data_,以便这些操作不会干扰.

c++

2
推荐指数
1
解决办法
132
查看次数

标签 统计

c ×1

c++ ×1

daemon ×1

linux ×1

rhel ×1