Windows的c++父子进程
时间: 2025-01-03 17:20:28 浏览: 3
### Windows C++ 创建和管理父子进程
在Windows操作系统中,创建和管理父子进程的方式与Linux有所不同。主要通过`CreateProcess`函数来启动新进程,并利用句柄和其他API来进行管理和同步。
#### 使用 `CreateProcess` 函数创建子进程
为了创建一个新的子进程,在Windows下通常会调用`CreateProcess` API。此方法允许指定要运行的应用程序及其参数,还可以控制输入/输出重定向以及安全属性等设置[^1]。
```cpp
#include <windows.h>
#include <iostream>
int main()
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// 启动新的子进程
if (!CreateProcess(
NULL, // 不使用模块名 (使用命令行)
const_cast<LPSTR>("notepad.exe"), // 命令行
NULL, // 进程安全性描述符
NULL, // 主线程的安全性描述符
FALSE, // 继承标志位
0, // 创建标志
NULL, // 使用父级环境块
NULL, // 使用父级当前目录
&si, // 指向STARTUPINFO结构体
&pi // 接收PROCESS_INFORMATION
))
{
std::cerr << "创建子进程失败 (" << GetLastError() << ")" << std::endl;
return -1;
}
// 等待直到子进程退出.
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭进程和主线程的句柄.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
std::cout << "子进程已完成." << std::endl;
return 0;
}
```
这段代码展示了如何使用`CreateProcess`来启动记事本应用程序作为子进程,并等待其完成后再继续执行父进程中的后续操作。
#### 处理僵尸进程
为了避免产生僵尸进程(即已经终止但尚未被回收资源的子进程),可以在父进程中调用`WaitForSingleObject`或类似的等待函数来确保及时获取子进程的状态并释放相关资源。上述例子中也包含了这一过程[^2]。
阅读全文