getpriority() 若指定 which 是 PRIO_PGRP 的話,那麼便能取得 process group 裡的「最大 priority 值」。先節錄相關 kernel code 如下:
asmlinkage long sys_getpriority(int which, int who)
{
...
case PRIO_PGRP:
if (!who)
who = process_group(current);
do_each_task_pid(who, PIDTYPE_PGID, p) {
niceval = 20 - task_nice(p);
if (niceval > retval)
retval = niceval;
} while_each_task_pid(who, PIDTYPE_PGID, p);
break;
...
}
接續昨天的 sys_getpriority(),讓我們再來看一下 PRIO_PGRP 參數的實作:
1. 如果 who 是 0 的話,先呼叫 process_group() 取得 group ID。
2. 使用 do_each_task_pid 與 while_each_task_pid 巨集做迴圈。
3. 在迴圈裡面,呼叫 task_nice() 取得 process 的 priority,然後判斷目前的 nice 值是否大於先前的 nice 值。這麼做的用意是「找到 process group 裡最大的 nice 值 (lowest priority) 後回傳」。
| 跟上我們的腳步:請讀以下的文章,再看這篇日記! |
Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue
您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw