在使用CreateProcessA函数创建进程时,如果不希望子进程继承父进程的符号句柄,可以通过以下两种方法解决:
使用SECURITY_ATTRIBUTES结构体:
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = FALSE;
// 创建进程
if (CreateProcessA(NULL, cmdLine, &sa, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
// 进程创建成功
}
使用GetStartupInfo函数:
STARTUPINFOA si;
GetStartupInfoA(&si);
si.dwFlags |= STARTF_USESTDHANDLES; // 使用标准输入、输出和错误句柄
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
// 创建进程
if (CreateProcessA(NULL, cmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi))
{
// 进程创建成功
}
这两种方法都可以确保子进程不会继承父进程的符号句柄。第一种方法通过设置SECURITY_ATTRIBUTES结构体中的bInheritHandle成员为FALSE,第二种方法通过使用GetStartupInfo函数获取父进程的标准输入、输出和错误句柄,并在创建子进程时将其传递给STARTUPINFOA结构体。
上一篇:不公平骰子的概率函数
下一篇:不共享数组的并行循环