#include <unistd.h> int nice(int inc); #include <sys/time.h> #include <sys/resource.h> int getpriority(int which, int who); int setpriority(int which, int who, int prio); which, who 參數
  1. PRIO_PROCESS:who 參數指定 process ID,傳回或設定 process 的 priority。
  2. PRIO_PGRP:who 參數指定 process group ID,傳回或設定 process group 的 priority。
  3. PRIO_USER:who 參數指定 user ID,傳回或設定 user 的 priority 。
注意事項
  1. nice 值範圍 -20~19,每個行程預設值為 0,nice 值越高,priority 越低,也就是 -20 high priority,19 low priority。
  2. nice 值的不同只是代表行程分配的執行時間長短,跟優先權沒有關係。
  3. nice() 函數是把目前的 nice 值再加上 inc 值,而 setpriority() 的 prio 是直接取代 nice 值。
  4. nice() 是為了相容舊版函數,已經被 setpriority() 給取代了。
下面演示 setpriority() 範例,在沒有 setpriority() 的狀態下,大約 500 秒失敗退出,在有 setpriority() 的狀態下,大約 4210 秒失敗退出。 #include <unistd.h> #include <stdio.h> #include <signal.h> #include <sys/time.h> #include <sys/resource.h> int main(int argc, char *argv[]) { int pid=getpid(); time_t tm1, tm2; sigset_t block; struct itimerval itv; sigemptyset(&block); sigaddset(&block, SIGALRM); sigprocmask(SIG_BLOCK, &block, NULL); itv.it_interval.tv_sec = 2; itv.it_interval.tv_usec = 0; itv.it_value = itv.it_interval; setitimer(ITIMER_REAL, &itv, NULL); tm1 = time(&tm1); while (1) { tm2 = time(&tm2); if (tm2 & 1) break; printf("%ld\n", tm2); setpriority(PRIO_PROCESS, pid, -20); sigwaitinfo(&block, NULL); setpriority(PRIO_PROCESS, pid, 0); } printf("start time = %ld\n", tm1); return 0; }

part 3: http://jyhshin.pixnet.net/blog/post/27784046

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()