လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကလေးဖြစ်စဉ်များ၏ ဦး စားထားမှုကိုထိန်းချုပ်လိုပါသလား။ PHP တွင်အကောင်အထည်ဖော်ရန် Proct_nice ကိုမည်သို့အသုံးပြုရမည်ကိုကြည့်ပါ

ကလေးဖြစ်စဉ်များ၏ ဦး စားထားမှုကိုထိန်းချုပ်လိုပါသလား။ PHP တွင်အကောင်အထည်ဖော်ရန် Proct_nice ကိုမည်သို့အသုံးပြုရမည်ကိုကြည့်ပါ

gitbox 2025-08-26

အ 0 တ်အထည်ဖွင့်လှစ်ခြင်းသို့မဟုတ်အသုတ်အပြောင်းအလဲကြီးသည့်အခြေအနေမျိုးတွင်ကျွန်ုပ်တို့သည် CPU ကို "စားရန်နောက်ခံအလုပ်များကိုမလိုချင်ကြပါ။ operating system သည်လက်ရှိလုပ်ငန်းစဉ်ကိုညှိရန်အတွက် ဦး စားပေးဆောင်ရွက်ပေးသည်။ ကလေးဖြစ်စဉ်ကို ထိန်းချုပ်ရန်၎င်းကို fork ကလေး၏လုပ်ငန်းစဉ်တွင် ခေါ်ယူနိုင်သည်သို့မဟုတ် Proc_open () နှင့် posix_sspiority နှင့်ပေါင်းစပ်။ သတ်သတ်မှတ်မှတ် pid တစ်ခုအတွက်၎င်းကိုညှိနိုင်သည်။ ဤဆောင်းပါးသည်လက်တွေ့ကျတဲ့ပါရာဒိုင်း, တွင်းအမှတ်များနှင့်ပြ esh နာဖြေရှင်းခြင်းအကြံပြုချက်များကိုပေးသည်။

CHEAT: UNIX ကဲ့သို့သောစနစ်များတွင်တန်ဖိုးရှိသောတန်ဖိုးသည်များသောအားဖြင့် -20 (အမြင့်ဆုံး) ကို 19 (အနိမ့်ဆုံး) ဖြစ်သည်။

  • သာမန်သုံးစွဲသူများသည် 0 → 10 မှ သာခံစားမှုကိုလျှော့ချနိုင်သည် (ဦး စားပေးမှုကိုလျှော့ချခြင်း) ကိုသာတိုးမြှင့်နိုင်သည်

  • အနုတ်လက်ခဏာတန်ဖိုးကို ဦး စားပေး (ဥပမာ - 5 ကဲ့သို့သော) ကို ဦး စားပေးလုပ်ဆောင်ခြင်းသည်များသောအားဖြင့် root capability သို့မဟုတ် cap_sys_nice လိုအပ်သည်။


ဖြစ်ရပ် 1: ကလေးဖြစ်စဉ်တွင် PCNTL_Fork () , "DePrecise နှင့် Run" ပြီးနောက်ကလေးဖြစ်စဉ်တွင်

သင် PCNTL_Fork () ကို အသုံးပြုသောအခါကလေးဖြစ်စဉ်ကိုရယူရန်ကလေး ဖြစ်စဉ်ကိုခေါ်ဆိုခြင်း () သည် ကလေးဖြစ်စဉ်ကို ခေါ်ဆိုခြင်းမှာတိုက်ရိုက်ဖြစ်သည်။ ဥပမာ - မိဘလုပ်ငန်းစဉ်သည်အလုပ်အကိုင်များယူရန်တာ 0 န်ယူသည်။

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">declare</span></span><span>(strict_types=</span><span><span class="hljs-number">1</span></span><span>);

</span><span><span class="hljs-comment">// extension ကို enabled သေချာအောင်လုပ်ပါ:pcntl、posix(မလုပ်မနေရမဟုတ်သော)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'pcntl_fork'</span></span><span>)) {
    </span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(STDERR, </span><span><span class="hljs-string">"pcntl မဖွင့်ပါ,သရုပ်ပြနိုင်ခြင်းမရှိပါ\n"</span></span><span>);
    </span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>);
}

</span><span><span class="hljs-variable">$pid</span></span><span> = </span><span><span class="hljs-title function_ invoke__">pcntl_fork</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pid</span></span><span> === -</span><span><span class="hljs-number">1</span></span><span>) {
    </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">RuntimeException</span></span><span>(</span><span><span class="hljs-string">'fork ဆုံးရှုံး'</span></span><span>);
}

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pid</span></span><span> === </span><span><span class="hljs-number">0</span></span><span>) {
    </span><span><span class="hljs-comment">// --- လက်အောက်ခံ ---</span></span><span>
    </span><span><span class="hljs-comment">// သေတမ်းစာ niceness ပုံမှန်ကနေ 0 ချိန်ညှိ 10(ပင်“ချစ်ကြည်ရင်းနှီးသော”,ပင်低优先级)</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">proc_nice</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>)) {
        </span><span><span class="hljs-comment">// ဆုံးရှုံး通常意味着ခွင့်ပြုချက်不足或ဇါတ်စင်不支持</span></span><span>
        </span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(STDERR, </span><span><span class="hljs-string">"[child] proc_nice ဆုံးရှုံး\n"</span></span><span>);
    }

    </span><span><span class="hljs-comment">// အာရုံဖော်ခြင်း CPU အထူးကြပ်မတ်အလုပ်</span></span><span>
    </span><span><span class="hljs-variable">$sum</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-number">5_000_000</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span>++) {
        </span><span><span class="hljs-variable">$sum</span></span><span> += </span><span><span class="hljs-variable">$i</span></span><span>;
    }
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"[child] done, sum=<span class="hljs-subst">{$sum}</span></span></span><span>\n";
    </span><span><span class="hljs-keyword">exit</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// --- မိဘလုပ်ငန်းစဉ် ---</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"[parent] fork 出လက်အောက်ခံ PID=<span class="hljs-subst">{$pid}</span></span></span><span>\n";
    </span><span><span class="hljs-comment">// မိဘလုပ်ငန်းစဉ်继续高优先级工作(ဥပမာအားဖြင့်တုံ့ပြန်မှု HTTP မေးမြန်း)</span></span><span>
    </span><span><span class="hljs-comment">// 等待လက်အောက်ခံ结束(生产环境မလုပ်မနေရမဟုတ်သော择不阻塞,သို့မဟုတ် signal ကိုသုံးပါ/ပြန်ခေါ်ပါ)</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">pcntl_wait</span></span><span>(</span><span><span class="hljs-variable">$status</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"[parent] child exit code = "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">pcntl_wexitstatus</span></span><span>(</span><span><span class="hljs-variable">$status</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

အရေးကြီးသောအချက်များ

  1. Proc_nice () သည် လက်ရှိလုပ်ငန်းစဉ်ကို သက်ရောက်သည်, ထို့ကြောင့်၎င်းကို ကလေးလုပ်ငန်းစဉ်ကုဒ်လမ်းကြောင်းကို ခေါ်ရန်လိုအပ်သည်။

  2. (ဥပမာ - 10 ကဲ့သို့သော) အပြုသဘောဆောင်သောတန်ဖိုးကိုချိန်ညှိခြင်းသည်များသောအားဖြင့်အခွင့်ထူးမလိုအပ်ပါ။ အနုတ်လက်ခဏာတန်ဖိုးကို setting ကျရှုံးလိမ့်မည်။

  3. အကယ်. သင်ရုံ "subtask ကိုအရင်းအမြစ်များမဖမ်းပါစေ" ဆိုလျှင် 10 ~ 15 ကိုသတ်မှတ်ခြင်းသည်မကြာခဏဖြစ်သည်။


ဇာတ်လမ်း 2: Proc_open () သည် ပြင်ပ command ကိုစတင်ပြီး၎င်း၏ ဦး စားပေးညှိသည်

အကယ်. သင်သည် လမ်းဆုံလမ်းခွကို မသုံးပါကအခြား command များကိုသင်ကိုယ်တိုင်လုပ်ကိုင်ရန် ( ffmpeg , ပြောင်းလဲခြင်းနှင့် PHP) ကိုသင်ကိုယ်တိုင်လုပ်ကိုင်ရန်နှင့် ဦး စားပေးရန်လိုအပ်သည်။ proc_get_status () ကလေးအတွက် PID ကိုရနိုင်သည်။ ထို့နောက် POSIX_SESTPRIAITIONETIONETION () (POSIX extension) ကိုပိုမိုအလိုလိုပြုလုပ်ခြင်းကိုအသုံးပြုပါ။

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">declare</span></span><span>(strict_types=</span><span><span class="hljs-number">1</span></span><span>);

</span><span><span class="hljs-variable">$descriptorSpec</span></span><span> = [
    </span><span><span class="hljs-number">0</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>],
    </span><span><span class="hljs-number">1</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>],
    </span><span><span class="hljs-number">2</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>],
];

</span><span><span class="hljs-comment">// ဥပမာတစ်ခုပေးပါ:တ ဦး တည်းပြေး CPU ထူထပ်သော PHP ကလေးရေးပါ</span></span><span>
</span><span><span class="hljs-variable">$process</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_open</span></span><span>(</span><span><span class="hljs-string">'php -r "usleep(3000000);"'</span></span><span>, </span><span><span class="hljs-variable">$descriptorSpec</span></span><span>, </span><span><span class="hljs-variable">$pipes</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_resource</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>)) {
    </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">RuntimeException</span></span><span>(</span><span><span class="hljs-string">'proc_open 启动ဆုံးရှုံး'</span></span><span>);
}

</span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_get_status</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>);
</span><span><span class="hljs-variable">$pid</span></span><span>    = </span><span><span class="hljs-variable">$status</span></span><span>[</span><span><span class="hljs-string">'pid'</span></span><span>] ?? </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"child pid = <span class="hljs-subst">{$pid}</span></span></span><span>\n";

</span><span><span class="hljs-comment">// POSIX လမ်း:မှန်သော PID တည်ဆောက်သည် nice(အကျယ်ည -20~19)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'posix_setpriority'</span></span><span>) &amp;&amp; </span><span><span class="hljs-variable">$pid</span></span><span>) {
    </span><span><span class="hljs-comment">// သေတမ်းစာလက်အောက်ခံ调为 10(ပင်低优先级)</span></span><span>
    </span><span><span class="hljs-variable">$ok</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">posix_setpriority</span></span><span>(</span><span><span class="hljs-number">10</span></span><span>, </span><span><span class="hljs-variable">$pid</span></span><span>, POSIX_PRIO_PROCESS);
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$ok</span></span><span>) {
        </span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(STDERR, </span><span><span class="hljs-string">"posix_setpriority ဆုံးရှုံး(ခွင့်ပြုချက်/ဇါတ်စင်/ပစ်မှတ်လုပ်ငန်းစဉ်အခြေအနေ)\n"</span></span><span>);
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// စီမံကိန်း B:ပြင်ပ command များကိုသုံးပါ renice(Linux/Unix)</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pid</span></span><span>) {
        </span><span><span class="hljs-comment">// မှတ်သား:အချို့သောပတ်ဝန်းကျင်တွင်လိုအပ်လိမ့်မည် sudo သို့မဟုတ်အခွင့်ထူး</span></span><span>
        @</span><span><span class="hljs-title function_ invoke__">shell_exec</span></span><span>(</span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'renice +10 -p %d 2&gt;/dev/null'</span></span><span>, </span><span><span class="hljs-variable">$pid</span></span><span>));
    }
}

</span><span><span class="hljs-comment">// သန့်ရှင်းရေးလုပ်သည်</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$pipes</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]); </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$pipes</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>]); </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$pipes</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>]);
</span><span><span class="hljs-variable">$exitCode</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_close</span></span><span>(</span><span><span class="hljs-variable">$process</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"child exit code = <span class="hljs-subst">{$exitCode}</span></span></span><span>\n";
</span></span>

အရေးကြီးသောအချက်များ

  • Proc_open () လက်ကိုင်ကို ပြန်ပို့ပြီး ဦး စားပေးကိုအလိုအလျောက်ညှိခြင်းမရှိပါ။ သင် PID ကိုရယူပြီး၎င်းကိုကိုယ်တိုင်ပြုလုပ်ရန်လိုအပ်သည်။

  • POX_SESTPRIFIANTIRETIANT () သည် Renice ကို ခေါ်ဆိုခြင်းထက်ပိုမိုထိန်းချုပ်နိုင်ပြီးဖြန့်ဖြူးခြင်းများတွင်ကွဲပြားခြားနားမှုနည်းပါးသော်လည်း Posix extension ကို ဖွင့်ရန်လိုအပ်သည်။

  • အကယ်. သင်သည်ကွန်တိန်နာသို့မဟုတ်အမြစ်မသင်္ကေတ၌ရှိနေသော်ငြားသာလျှင် ,


ဇာတ်လမ်း 3: ကောင်းသော / Ionice ကိုစတင်ရန် (အမြန်ဆုံး)

PHP တွင်ညှိရန်မလိုအပ်ပါက Subprocess ကို ဦး စားပေးအဆင့် နိမ့်ခြင်းဖြင့်တိုက်ရိုက်ဖြန့်ချိနိုင်သည်။

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">declare</span></span><span>(strict_types=</span><span><span class="hljs-number">1</span></span><span>);

</span><span><span class="hljs-comment">// CPU ချစ်ကြည်ရင်းနှီးသော:nice +10</span></span><span>
</span><span><span class="hljs-variable">$cmd</span></span><span> = </span><span><span class="hljs-string">'nice -n 10 php worker.php'</span></span><span>;

</span><span><span class="hljs-comment">// I/O ချစ်ကြည်ရင်းနှီးသော:ionice class 2(best-effort),level 7(နိဗ္ဗျကပိုင်း)</span></span><span>
</span><span><span class="hljs-variable">$cmd</span></span><span> = </span><span><span class="hljs-string">'ionice -c 2 -n 7 nice -n 10 php worker.php'</span></span><span>;

</span><span><span class="hljs-variable">$proc</span></span><span> = </span><span><span class="hljs-title function_ invoke__">proc_open</span></span><span>(</span><span><span class="hljs-variable">$cmd</span></span><span>, [
    </span><span><span class="hljs-number">0</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>],
    </span><span><span class="hljs-number">1</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>],
    </span><span><span class="hljs-number">2</span></span><span> =&gt; [</span><span><span class="hljs-string">'pipe'</span></span><span>, </span><span><span class="hljs-string">'w'</span></span><span>],
], </span><span><span class="hljs-variable">$pipes</span></span><span>);

</span><span><span class="hljs-comment">// ... 省略与上文相同的သန့်ရှင်းရေးလုပ်သည်逻辑</span></span><span>
</span></span>

စကားရိပ်

  • I / O Scheduling (Disk) ကို သာသက်ရောက် သည်

  • အချို့သောကွန်တိန်နာအနည်းဆုံးပုံရိပ်များသည် ionice တွင် oonice မရှိပါ


အမှားကိုင်တွယ်ဖြေရှင်းခြင်းအမှား

  1. ပြန်လာတန်ဖိုးနှင့်နှိုးဆော်သံ detect

    • proc_nice () စစ်မှန် / မှားယွင်းသော ပြန်လာ။ အကယ်. သင်ပျက်ကွက်ပါက log ကိုမှတ်တမ်းတင်ပြီး posix_geteuid () , ပစ်မှတ်တန်ဖိုး,

    • POX_SESTPRIFIANTIREity () အလားတူပင် ခွင့်ပြုချက်မရှိခြင်း ကြောင့်အလားတူဆုံးရှုံးမှုများနှင့် PID မှထွက်ခွာသွားသည်

  2. အမှန်တကယ် ဦး စားပေးမှတ်တမ်းတင်

    • Linux သည် / pro / <pid> / stat / stat / state, သို့မဟုတ် Ps -o Pid, ​​CMD -p <pid> sideification ကို ခေါ်ဆိုနိုင်သည်။

    • PHP တွင်သင်သည် EURT (PS -o Pid, ​​Ni, CMD -p ') exec (PS -o Pid, ​​CMD -p')

  3. Hierarchical လက်ရှိကန့်သတ်

    • ၎င်းသည် CPU ပြိုင်ပွဲအတွက် သာထိရောက်မှုရှိပါသည်။ တစ်ပြိုင်နက်တည်းတွင်မြင့်တက်နေဆဲဆို ပါ က ,


ပလက်ဖောင်းနှင့်ခွင့်ပြုချက်အသေးစိတ်

  • Linux / Unix : ဤဆောင်းပါးရှိနည်းလမ်းသည်သက်ဆိုင်သည်။ အခွင့်အလမ်းမရှိသောအသုံးပြုသူများသည်သာယာမှုတိုးပွားလာနိုင်သည် ("ပိုမိုကောင်းမွန်သောဟောပြောချက်")

  • ကွန်တိန်နာ / system service : 0 န ဆောင်မှု ကို systemdd မှစီမံပါက, ကွန်တိန်နာကို - CAND-add sys_nice ကိုအပြေး parameters တွေကိုထည့်သွင်း နိုင်ပါတယ်။

  • MacOS : Semantics သည် Linux, Renice နှင့် Posix Interface များနှင့်ဆင်တူသည်။

  • Windows : proc_nice () ကို မရရှိနိုင်ပါ, ထိရောက်မှုမရှိပါ ။ Windows ၏ ဦး စားပေးကို proc_open () wmic / powershell သို့မဟုတ် ffi မှတဆင့်ချိန်ညှိသင့်သည်။ ၎င်းသည် မတူကွဲပြားသောအကောင်အထည်ဖော်မှုလမ်းကြောင်းများ နှင့်သက်ဆိုင်ပြီးဤဆောင်းပါးနှင့်အတူတူပင်စည်းမျဉ်းစည်းကမ်းများမရှိပါ။


လက်တွေ့ကျတဲ့အကြံပြုချက်များ (Shortnotes)

  • ကလေးဖြစ်စဉ်တွင် - PCNTL_Fork () →ကလေး ရေးဆွဲခြင်းလုပ်ငန်းခွင် (10 ~ 15)

  • ပြင်ပ command : proc_open ()Proc_get_status () POSIX_SESSTPRIATUS ($ ကောင်းသည့်, $ PID, POX, POX_PRIO_PROCESS)

  • တစ် ဦး ကလွန်း : command ကိုမတိုင်မီ nice -n <n> add ထည့်ပါ။ I / O သည် ionice နှင့် သိပ်မထူထပ်သည်။

  • ခွင့်ပြုချက်များ - အပျက်သဘောတန်ဖိုးများအခွင့်ထူးများလိုအပ်သည်။ Sys_nice စွမ်းရည်ကိုထည့်သွင်းစဉ်းစားပါသို့မဟုတ်ကွန်တိန်နာထဲရှိအပြုသဘောဆောင်သောတန်ဖိုးများကိုအသုံးပြုပါ။

  • အတည်ပြုခြင်း - PS သို့မဟုတ် Read / proc ကို စစ်ဆေးပါ။ Logs ကိုလွယ်ကူသော traceability အတွက်မှတ်တမ်းတင်ထားသည်။


ကိုးကားစရာ snippet: "DePrecise Process" gadget function ကို encapsulate

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">declare</span></span><span>(strict_types=</span><span><span class="hljs-number">1</span></span><span>);

<span class="hljs-comment">/**
 * သေတမ်းစာ指定 PID လုပ်ငန်းစဉ် niceness ချိန်ညှိ目标值(ပျက်ကွက်ခြင်း 10)。
 * ပြန်လာ true ညှစ်“အောင်မြင်သည်”(အာမခံချက်နောက်ဆုံးအကျိုးသက်ရောက်မှုမရှိပါ,ပေါင်းစပ်ခံရဖို့လိုအပ်ပါတယ် ps မှန်ကေြင်းဝန်ခံ)。
 */</span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">lower_priority</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">int</span></span></span><span> </span><span><span class="hljs-variable">$pid</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$nice</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>): </span><span><span class="hljs-title">bool</span></span><span>
{
    </span><span><span class="hljs-comment">// နယ်နိမိတ်စောင့်</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$nice</span></span><span> &lt; -</span><span><span class="hljs-number">20</span></span><span> || </span><span><span class="hljs-variable">$nice</span></span><span> &gt; </span><span><span class="hljs-number">19</span></span><span>) {
        </span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">InvalidArgumentException</span></span><span>(</span><span><span class="hljs-string">'nice ဖြစ်ရမည် -20..19 အကြား'</span></span><span>);
    }

    </span><span><span class="hljs-comment">// ပထမ ဦး ဆုံးရွေးချယ်မှု POSIX API</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">function_exists</span></span><span>(</span><span><span class="hljs-string">'posix_setpriority'</span></span><span>)) {
        </span><span><span class="hljs-variable">$ok</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">posix_setpriority</span></span><span>(</span><span><span class="hljs-variable">$nice</span></span><span>, </span><span><span class="hljs-variable">$pid</span></span><span>, POSIX_PRIO_PROCESS);
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$ok</span></span><span>) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
        }
    }

    </span><span><span class="hljs-comment">// ရေှးယူနိုင်ခြင်း:renice(တခုတည်းသော, တဉီးတည်းသော *nix)</span></span><span>
    </span><span><span class="hljs-variable">$ret</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
    @</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'renice %s%d -p %d 2&gt;/dev/null'</span></span><span>,
        </span><span><span class="hljs-variable">$nice</span></span><span> &gt;= </span><span><span class="hljs-number">0</span></span><span> ? </span><span><span class="hljs-string">'+'</span></span><span> : </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-variable">$nice</span></span><span>, </span><span><span class="hljs-variable">$pid</span></span><span>
    ), </span><span><span class="hljs-variable">$out</span></span><span>, </span><span><span class="hljs-variable">$ret</span></span><span>);

    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$ret</span></span><span> === </span><span><span class="hljs-number">0</span></span><span>;
}
</span></span>