在 Linux 下用 C++ 配置进程,通常指下面几类事情之一。我按常见需求给你系统地讲一下,并给出可直接用的示例。你可以按需取用。
#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;
}
}
✅ 特点:
#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");
}
}
✅ 常用于:
#include <unistd.h>
#include <sys/types.h>
setuid(1000); // 切换到普通用户
setgid(1000);
⚠️ 需要 root 权限 才能成功
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 | 栈大小 |
#include <unistd.h>
nice(-10); // 提高优先级(需 root)
#include <sched.h>
sched_param param;
param.sched_priority = 50;
sched_setscheduler(0, SCHED_RR, ¶m);
✅ 常用于:
#include <unistd.h>
daemon(0, 0);
或手动实现(更可控):
fork();
setsid();
fork();
chdir("/");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
| 方式 | 适用 |
|---|---|
| pipe | 父子进程 |
| fifo | 无关进程 |
| shared memory | 高性能 |
| socket | 本地/网络 |
| signal | 简单通知 |
示例(pipe):
int fd[2];
pipe(fd);
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。