【问题标题】:Assigning process to a processor group将进程分配给处理器组
【发布时间】:2016-11-15 01:52:40
【问题描述】:

我有两个物理处理器的服务器。我想将当前进程设置为特定组,就好像我从任务管理器手动执行一样。请注意,它不是亲和性,而是处理器组(每个组有 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 导致应用程序因访问冲突而崩溃。

此代码也不起作用。它只是 chagnes 一个线程的亲和力,但看起来并不影响进程组: How Can I Set Processor Affinity in .NET?

【问题讨论】:

    标签: c# c++ process affinity numa


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!这解决了进程创建的问题。我希望有解决方案来更改现有流程的流程组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 2021-06-08
    • 2018-10-04
    • 2013-02-05
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多