用windows系统编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符 串“parent:”和自己的标识数,子进程则重复显示字符串“child:”和自己的标识数。
时间: 2024-10-08 20:12:15 浏览: 30
进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,
5星 · 资源好评率100%
在Windows系统中,不像Unix/Linux环境下的`fork()`函数,Windows提供了`CreateProcess()`函数来创建新的进程。然而,Windows并不直接支持fork()操作。如果你想要模拟类似的行为,可以使用Windows API中的`CreateProcess()`结合一些基本编程技巧。下面是一个简单的示例,展示了如何创建一个父进程和子进程:
```cpp
#include <windows.h>
#include <iostream>
// 父进程函数
void parent_process(int child_id) {
for (int i = 0; i < 5; ++i) {
std::cout << "parent: " << child_id << "\n";
Sleep(1000); // 暂停1秒
}
}
// 子进程函数
void child_process(int child_id) {
for (int i = 0; i < 5; ++i) {
std::cout << "child: " << child_id << "\n";
Sleep(1000);
}
}
int main() {
int pid;
// 创建子进程
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
if (!CreateProcess(NULL, // 使用默认的命令行提示符
L"child.exe", // 子进程的可执行文件名
NULL, // 主线程组的父进程句柄
NULL, // 子进程线程组的父进程句柄
FALSE, // 子进程不继承父进程的句柄
0, // 初始权限
NULL, // 用于进程启动的环境变量块
NULL, // 要启动的进程的初始目录
&si, // 针对新进程的信息结构
&pi)) { // 进程信息结构指针
// 处理错误
std::cerr << "Failed to create child process\n";
return 1;
}
// 父进程继续运行
parent_process(pid = pi.dwProcessId);
CloseHandle(pi.hThread); // 关闭子进程的线程句柄
WaitForSingleObject(pi.hProcess, INFINITE); // 等待子进程结束
CloseHandle(pi.hProcess); // 关闭子进程句柄
return 0;
}
```
这个例子假设有一个名为`child.exe`的子程序,它会执行与`child_process`函数相同的逻辑。你需要确保`main`函数中`child.exe`的实际路径是正确的。
阅读全文