2017-03-31 92 views
0

我在做嵌入式系统编程。 默认情况下,我们的进程被设置为更高的优先级,但是对于像调用shell命令,写入文件等操作。我正在考虑降低优先级,然后重新开始。所以它就像一对函数调用:“setdefaultpriority”和“提高优先级”。会改变进程优先级经常有副作用

在我们的过程中有很多shell命令调用。在一个文件中,我可能需要调用几十对“setdefault ...”和“improve ..”

我的问题,在一个进程中有那么多优先级操作会有什么不好的影响?

+0

有**测量结果**表示存在性能问题?如果不是,我不会打扰。 – Jens

回答

0

setpriority在非根进程中只能上升(降低优先级),永不停止。

你可以做的是在执行shell命令之前减少子进程中的进程优先级。

//errror checks ommited 
#include <sys/resource.h> 
#include <sys/time.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <assert.h> 
#include <sys/wait.h> 

int main() 
{ 
    pid_t pid; 
    pid=fork(); 
    assert(pid>=0); 
    if (!pid){ 
     execlp("nice", "nice", (char*)0); 
     _exit(1); 
    } 
    wait(0); 
    pid=fork(); 
    if (!pid){ 
     setpriority(PRIO_PROCESS, 0, 10); 
     execlp("nice", "nice", (char*)0); 
     _exit(1); 
    } 

} 
/* should print: 
    0 
    10 
*/ 

系统调用为setpriority简单相比,forkexec*成本可以忽略不计的性能开销。