在C中更改当前进程的优先级

时间:2008-08-27 06:17:48

标签: c unix cross-platform process-management

在Windows上,我可以这样做:

HANDLE hCurrentProcess = GetCurrentProcess();

SetPriorityClass(hCurrentProcess, ABOVE_NORMAL_PRIORITY_CLASS);

我怎样才能在* nix上做同样的事情?

3 个答案:

答案 0 :(得分:23)

尝试:

#include <sys/time.h>
#include <sys/resource.h>

int main(){
    setpriority(PRIO_PROCESS, 0, -20);
}

请注意,您必须以超级用户身份运行才能使其正常工作。

(有关详细信息,请在提示符下键入“man setpriority”。)

答案 1 :(得分:5)

如果在unix下做这样的事情你想要(作为root)chmod你的任务并设置s位。然后,您可以在运行时更改您的运行对象,优先级,线程调度等。

只要您没有编写带有错误的大型多线程应用程序就可以了,这样您就可以接管48个CPU盒子并且没有人可以关闭您,因为您的每个CPU都会以100%的速度旋转所有线程集以root身份运行的SHED_FIFO(运行完成)。

不,我不会从经验中说话......

答案 2 :(得分:2)

@ allain

您是否可以在不超级用户的情况下降低自己的流程优先级?

不确定。但请注意,这是一条单行道。你甚至无法回到你开始的地方。当系统出现大量负载时,即使是相当小的优先级降低也会对运行时间造成极大的影响。