将进程分配给处理器组

本文关键字:处理器 分配 进程 | 更新日期: 2023-09-27 18:17:59

我有一个带有两个物理处理器的服务器。我想将当前进程设置为特定组,就像我从任务管理器手动执行一样。注意,它不是亲和关系,而是处理器组(每个组有16个逻辑处理器)。无论在c#还是c++中,我都找不到任何方法来做到这一点。或者,我尝试创建一个具有预设属性的进程:

LPPROC_THREAD_ATTRIBUTE_LIST pAttribs = NULL;
WORD iNuma = 0; 
STARTUPINFOEX sInfoEx;
sInfoEx.StartupInfo.cb = sizeof(sInfoEx);
DWORD size;
int success = InitializeProcThreadAttributeList(0, 1, 0, &size);
pAttribs = reinterpret_cast<LPPROC_THREAD_ATTRIBUTE_LIST>(HeapAlloc(GetProcessHeap(), 0, size));
success = InitializeProcThreadAttributeList(pAttribs, 1, 0, &size);
success = UpdateProcThreadAttribute(pAttribs, 0, PROC_THREAD_ATTRIBUTE_PREFERRED_NODE, &iNuma, sizeof(iNuma), NULL, NULL);
long err = GetLastError();
auto fCreationFlags = EXTENDED_STARTUPINFO_PRESENT;
PROCESS_INFORMATION pi = { 0 };
STARTUPINFOEX si = { 0 };
si.StartupInfo.cb = sizeof(si);
si.lpAttributeList = pAttribs;
int p = CreateProcess(NULL, L"notepad.exe", NULL, NULL, false, fCreationFlags, NULL, NULL, &si.StartupInfo, &pi);

调用CreateProcess会导致应用程序因访问冲突而崩溃。

这段代码也不起作用。它只是改变了一个线程的亲和性,但并不影响进程组:如何在。net中设置处理器关联?

将进程分配给处理器组

根据文档,CreateProcess的Unicode版本可以修改命令行(第二个)参数。传入一个常量字符串(你正在这样做)可能会导致访问冲突。

您需要传入一个可修改的string或数组