13

在 Windows 上,我可以这样做:

HANDLE hCurrentProcess = GetCurrentProcess();

SetPriorityClass(hCurrentProcess, ABOVE_NORMAL_PRIORITY_CLASS);

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

4

3 回答 3

24

尝试:

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

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

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

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

于 2008-08-27T06:20:54.843 回答
5

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

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

不..我不会根据经验说话....

于 2008-09-12T23:35:07.937 回答
2

@艾伦

您可以在不成为超级用户的情况下降低自己进程的优先级吗?

当然。但是请注意,这是一条单行道。你甚至无法回到你开始的地方。当系统负载很大时,即使是相当小的优先级降低也会对运行时间产生惊人的大影响。

于 2008-08-27T17:48:31.587 回答