温馨提示×

Linux C++怎么配置进程

小樊
38
2026-08-16 01:04:42
栏目: 编程语言

在 Linux 下用 C++ 配置进程,通常指下面几类事情之一。我按常见需求给你系统地讲一下,并给出可直接用的示例。你可以按需取用。


一、创建进程(fork / exec)

1️⃣ fork 创建子进程

#include <unistd.h>
#include <sys/types.h>
#include <iostream>

int main() {
    pid_t pid = fork();

    if (pid < 0) {
        std::cerr << "fork failed\n";
    } else if (pid == 0) {
        // 子进程
        std::cout << "Child PID: " << getpid() << std::endl;
    } else {
        // 父进程
        std::cout << "Parent PID: " << getpid()
                  << ", Child PID: " << pid << std::endl;
    }
}

✅ 特点:

  • 子进程复制父进程
  • 常用于守护进程、多进程服务

2️⃣ exec 执行新程序

#include <unistd.h>
#include <sys/types.h>
#include <iostream>

int main() {
    pid_t pid = fork();

    if (pid == 0) {
        execl("/bin/ls", "ls", "-l", nullptr);
        // 如果 exec 成功,不会执行到这里
        perror("execl failed");
    }
}

✅ 常用于:

  • 启动外部程序
  • 进程替换

二、进程权限与用户配置

1️⃣ 设置 UID / GID(提权 / 降权)

#include <unistd.h>
#include <sys/types.h>

setuid(1000);   // 切换到普通用户
setgid(1000);

⚠️ 需要 root 权限 才能成功


三、进程资源限制(ulimit)

使用 setrlimit

#include <sys/resource.h>
#include <iostream>

int main() {
    rlimit rl;
    getrlimit(RLIMIT_NOFILE, &rl);

    rl.rlim_cur = 1024;
    setrlimit(RLIMIT_NOFILE, &rl);
}

常见资源:

资源 含义
RLIMIT_NOFILE 最大文件描述符
RLIMIT_CORE core dump 大小
RLIMIT_STACK 栈大小

四、进程调度与优先级(nice)

1️⃣ 设置进程优先级

#include <unistd.h>
nice(-10);  // 提高优先级(需 root)

2️⃣ 设置调度策略(实时进程)

#include <sched.h>

sched_param param;
param.sched_priority = 50;

sched_setscheduler(0, SCHED_RR, &param);

✅ 常用于:

  • 实时系统
  • 音视频、工业控制

五、进程守护化(daemon)

标准做法

#include <unistd.h>

daemon(0, 0);

或手动实现(更可控):

fork();
setsid();
fork();
chdir("/");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

六、进程间通信(IPC)

方式 适用
pipe 父子进程
fifo 无关进程
shared memory 高性能
socket 本地/网络
signal 简单通知

示例(pipe):

int fd[2];
pipe(fd);

七、进程监控(wait / kill)

等待子进程

wait(nullptr);

发送信号

kill(pid, SIGTERM);

八、推荐工具与调试

ps aux
top
htop
strace ./a.out

九、常见场景总结

需求 做法
多进程 fork
守护进程 daemon / setsid
限制资源 setrlimit
实时调度 sched_setscheduler
降权 setuid/setgid
进程通信 pipe / shm / socket

如果你能具体说一句:

“我想配置进程的 XXX(比如:限制内存、守护进程、实时调度、多进程架构)”

我可以直接给你 完整可编译的 C++ 示例 + Makefile

0