在现代操作系统中,进程是程序执行的基本单位。掌握C++进程创建与管理技术,对于开发高性能、高并发的应用程序至关重要。本教程将带你从零开始,深入浅出地学习如何在不同操作系统(Windows 和 Linux)下使用 C++ 创建和管理进程。
进程是正在运行的程序实例。每个进程拥有独立的内存空间、文件描述符、环境变量等资源。操作系统通过调度多个进程实现多任务处理。
由于 C++ 标准库本身不提供跨平台的进程创建接口,因此我们需要依赖操作系统的 API。下面分别介绍在 Linux 和 Windows 系统下的实现方法。
在类 Unix 系统(如 Linux)中,fork() 是创建新进程的核心系统调用。它会复制当前进程,生成一个几乎完全相同的子进程。
#include <iostream>#include <unistd.h> // for fork()#include <sys/wait.h> // for wait()int main() { pid_t pid = fork(); if (pid < 0) { // fork 失败 std::cerr << "Fork failed!" << std::endl; return 1; } else if (pid == 0) { // 子进程 std::cout << "Child process: PID = " << getpid() << std::endl; sleep(2); // 模拟工作 std::cout << "Child finished." << std::endl; } else { // 父进程 std::cout << "Parent process: Child PID = " << pid << std::endl; wait(nullptr); // 等待子进程结束 std::cout << "Parent continues after child." << std::endl; } return 0;} 这段代码展示了基本的 C++多进程编程流程:父进程调用 fork() 后分裂为两个进程。子进程执行自己的逻辑,父进程则等待子进程完成。
在 Windows 系统中,我们使用 Win32 API 中的 CreateProcess 函数来启动新进程。这比 fork() 更复杂,但功能更强大。
#include <iostream>#include <windows.h>int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); // 启动记事本作为示例 const char* cmd = "notepad.exe"; if (!CreateProcessA( NULL, // 应用程序名称 (LPSTR)cmd, // 命令行 NULL, // 进程安全属性 NULL, // 线程安全属性 FALSE, // 是否继承句柄 0, // 创建标志 NULL, // 使用父进程环境变量 NULL, // 使用父进程当前目录 &si, // STARTUPINFO &pi // PROCESS_INFORMATION )) { std::cerr << "CreateProcess failed!" << std::endl; return 1; } std::cout << "Process created with PID: " << pi.dwProcessId << std::endl; // 等待进程结束 WaitForSingleObject(pi.hProcess, INFINITE); // 关闭句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); std::cout << "Child process finished." << std::endl; return 0;} 这个例子演示了如何在 Windows C++进程管理中启动一个外部程序(如 notepad.exe),并等待其结束。注意:实际项目中应根据需要调整参数。
wait() 回收资源,会留下僵尸进程(Linux)。- 在 Linux 中,始终在父进程中调用 wait() 或 waitpid() 避免僵尸进程。
- 在 Windows 中,记得关闭 hProcess 和 hThread 句柄以防止资源泄漏。
- 跨平台项目可考虑使用 Boost.Process 或 Qt 的 QProcess 封装层。
通过本教程,你已经掌握了 C++进程创建 的核心方法,包括 Linux 下的 fork() 和 Windows 下的 CreateProcess。无论你是开发服务器程序、并行计算工具,还是系统级应用,这些知识都是构建高效多进程架构的基础。继续练习,尝试结合 Linux C++ fork 与管道实现进程间通信,你的 C++ 编程能力将更上一层楼!
本文由主机测评网于2025-12-05发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123256.html