2017-03-31 1 views
0

私は組み込みシステムプログラミングをやっています。 プロセスはデフォルトでより高い優先度に設定されていますが、シェルコマンドを呼び出すようないくつかのアクションでは、ファイルを書き込みます。私はその優先順位を下げて、再びそれを上げることを考えていました。つまり、 "setdefaultpriority"と "priority priority"のような関数呼び出しのようなものです。は、プロセスの優先度を頻繁に変更する副作用があります

私たちのプロセスでは多くのシェルコマンド呼び出しがあります。 1つのファイルで、私は数十の "setdefault ..."と "改善する"のペアを呼び出す必要があるかもしれません。

私の質問は、

+0

**測定値**はパフォーマンスに問題がありますか?そうでなければ、私は気にしません。 – Jens

答えて

0

setpriorityは、ルート以外のプロセスでのみ上がる(優先度を下げる)ことはできません。

あなたができることは、シェルコマンドを実行する前に、子プロセスのプロセス優先度を下げることです。

//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*のコストに比べて無視できる程度でなければなりません。

関連する問題