温馨提示×

怎样用linux写c++服务

小樊
35
2026-10-08 00:34:25
栏目: 编程语言

在 Linux 上写 C++ 服务(后台服务 / daemon),一般可以分为几个阶段:开发 → 编译 → 运行方式(前台/后台/系统服务)→ 管理(日志、自启、守护)。下面给你一个从零到可上线的清晰路线。


一、最简单:写一个 C++ 服务程序

1️⃣ 示例:一个最基础的 C++ 服务

// server.cpp
#include <iostream>
#include <unistd.h>

int main() {
    while (true) {
        std::cout << "service running..." << std::endl;
        sleep(5);
    }
    return 0;
}

2️⃣ 编译

g++ server.cpp -o server

3️⃣ 前台运行

./server

二、让它成为“后台服务”

✅ 方式一:直接后台运行(不推荐生产)

./server &

或者

nohup ./server > server.log 2>&1 &

三、写成真正的 Linux 服务(推荐 ✅)

✅ 方式一:systemd(现代 Linux 标准)

1️⃣ 编写服务文件

sudo vim /etc/systemd/system/myserver.service

内容示例:

[Unit]
Description=My C++ Service
After=network.target

[Service]
ExecStart=/home/user/server
WorkingDirectory=/home/user
Restart=always
User=user
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2️⃣ 启动服务

sudo systemctl daemon-reload
sudo systemctl start myserver
sudo systemctl enable myserver

3️⃣ 查看状态 / 日志

systemctl status myserver
journalctl -u myserver -f

✅ 这是生产环境最推荐方式


✅ 方式二:传统 daemon(了解即可)

自己 fork + setsid,不适合新手,现代系统不建议。


四、更“像服务”的 C++ 写法(建议)

1️⃣ 信号处理(优雅退出)

#include <signal.h>

volatile bool running = true;

void handler(int) {
    running = false;
}

int main() {
    signal(SIGTERM, handler);
    signal(SIGINT, handler);

    while (running) {
        // do work
    }
}

2️⃣ 写日志而不是 cout

#include <fstream>

std::ofstream log("server.log", std::ios::app);
log << "running" << std::endl;

或用 spdlog(强烈推荐)


五、网络服务示例(常见)

TCP 服务(简化)

// 用 socket / epoll / boost.asio

常用库:

  • Boost.Asio
  • libevent
  • muduo(高性能 C++)

六、推荐的工程结构

myserver/
├── CMakeLists.txt
├── src/
│   └── main.cpp
├── build/
└── config.yaml

CMake 示例

cmake_minimum_required(VERSION 3.10)
project(myserver)

add_executable(myserver src/main.cpp)

七、调试 & 运维

gdb ./server
strace -f ./server
top / htop
systemctl restart myserver

八、总结(新手路线)

✅ 推荐路线

  1. 写 C++ 程序
  2. 用 systemd 管理服务
  3. 日志用 journalctl
  4. 用 CMake 管理项目
  5. 信号做优雅退出

如果你愿意,我可以:

  • 给你一个 完整可运行的 systemd C++ 服务模板
  • 写一个 TCP / HTTP 服务示例
  • 教你 Docker + C++ 服务
  • 按你的使用场景(游戏 / 后端 / 物联网)定制

你现在是 学习 / 面试 / 生产项目 哪一种?

0 踩