လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Interrupt signals များကိုကိုင်တွယ်ရန် Time_NANOSESEP နှင့် PCNTL_SIGNTAL နှင့်အတူ

Interrupt signals များကိုကိုင်တွယ်ရန် Time_NANOSESEP နှင့် PCNTL_SIGNTAL နှင့်အတူ

gitbox 2025-05-29

Daemons သို့မဟုတ် Task Quunge Ways ကဲ့သို့သော PHP scripts များပြုလုပ်ရန်လိုအပ်သည့် PHP scripts များကိုတီထွင်သည့် PHP scripts များကိုတီထွင်သောအခါ Ctrl + C ကဲ့သို့သော sigts ကဲ့သို့သော sigts ကိုဖြတ်တောက်ရန်အထူးသဖြင့်တုန့်ပြန်ရန်အထူးအရေးကြီးသည်။ ဤဆောင်းပါးသည် PCNTL_Signal နှင့် Time_Nanosleep ကိုကြော့ရှင်းစွာကိုင်တွယ်နိုင်ကြောင်းနှင့်ကြော့ရှင်းစွာကိုင်တွယ်နိုင်ကြောင်းကိုမိတ်ဆက်ပေးနိုင်သည်။ ထို့ကြောင့်သင်၏ scription သည်လုံခြုံစွာ,

1 ။ အခြေခံသဘောတရားများ

1 ။ pcntl_signal

PCNTL_Signal ဆိုသည်မှာ PHP မှပေးသောလုပ်ငန်းစဉ်ထိန်းချုပ်မှုလုပ်ငန်းတစ်ခုဖြစ်ပြီး Sigint , Sigterm ကဲ့သို့သော posix အချက်ပြမှုများကိုတုန့်ပြန်ရန်အချက်ပြ processing function ကိုမှတ်ပုံတင်ရန်ခွင့်ပြုသည်။ ၎င်းကို CLI scripts များတွင်အသုံးပြုသည်။

2 ။ time_nanosleep

Time_nanosleep သည် အိပ်စက်ခြင်း ထက်ပိုမိုကောင်းမွန်သောနှောင့်နှေးခြင်းလုပ်ငန်းဖြစ်သည်။ မကြာခဏဆိုသလိုမဲဆန္ဒရှင်များလိုအပ်သည့်ဖြစ်ရပ်များတွင် အိပ်စက်ခြင်း ထက်ပိုမိုလွယ်ကူနေစဉ်အတွင်းပိုမိုလွယ်ကူစွာစောင့်ဆိုင်းနေသည့်ကောင်းမွန်သောစောင့်ဆိုင်းမှုဆိုင်ရာယုတ္တိဗေဒကိုအကောင်အထည်ဖော်ရန်ခွင့်ပြုသည်။

2 ။ ကြော့ပြတ်တောက်ခြင်း၏စိန်ခေါ်မှု

CLI script တွင် အိပ်စက်ခြင်း နှင့်အတူပြ a နာတစ်ခုရှိသည် - အကယ်. လုပ်ငန်းစဉ်သည် အိပ်နေ ပါက အိပ်စက်ခြင်း ပြီးဆုံးသည်အထိအချက်ပြမှုသည်ချက်ချင်းအကျိုးသက်ရောက်မည်မဟုတ်ပါ။ Time_Nanosleep ကိုအသုံးပြုပြီးအချိန်တိုအတွင်းအိပ်စက်ခြင်းဖြင့်ဤပြ problem နာကိုရှောင်ရှားနိုင်သည်။ PCNTL_Signal_DISPATHTATE နှင့် တွဲဖက်. အိပ်စက်ခြင်းတစ်ခုချင်းစီအကြားရှိ signal တစ်ခုရှိ, မရှိစစ်ဆေးနိုင်သည်။

3 ။ နမူနာကုဒ်

PCNTL_SIGNATIST ကို TIME_NANOSTLEEP ကို ​​အသုံးပြု. PCNTL_SIMAGNAL ကို အသုံးပြု. PHP SPORT SPORE ဆိုသည်မှာ TIME_NANOSTESSESS ကိုဖြတ်တောက်ရန်:

 <?php

declare(ticks = 1);

$running = true;

// စာရင်း SIGINT နှင့် SIGTERM signal processor
pcntl_signal(SIGINT, function($signo) use (&$running) {
    echo "ခံယူ SIGINT အလံပြချက်,ထွက်ရန်ပြင်ဆင်ပါ...\n";
    $running = false;
});

pcntl_signal(SIGTERM, function($signo) use (&$running) {
    echo "ခံယူ SIGTERM အလံပြချက်,ထွက်ရန်ပြင်ဆင်ပါ...\n";
    $running = false;
});

// Task Execute Loop Simulate
while ($running) {
    echo "အလုပ်များအပေါ်အလုပ်လုပ်...\n";

    // အပြောင်းအလဲနဲ့လုပ်ငန်းစဉ်ဆက်ဖြစ်နေသည်ဟုယူဆ 3 စက်ဏန့်,ဒါပေမယ့်တိုင်း 0.1 စက်ဏန့်检查一次အလံပြချက်
    $totalSleepSeconds = 3;
    $intervalMicro = 100000000; // 0.1 စက်ဏန့် = 100,000,000 纳စက်ဏန့်
    $iterations = $totalSleepSeconds * 10;

    for ($i = 0; $i < $iterations; $i++) {
        if (!$running) {
            break;
        }

        // အချိန်တိုင်း sleep 0.1 စက်ဏန့်,期间检查အလံပြချက်
        time_nanosleep(0, $intervalMicro);
        pcntl_signal_dispatch(); // 显式检查是否有အလံပြချက်到达
    }
}

// အရင်းအမြစ်များကိုသန့်ရှင်းရေး
echo "အရင်းအမြစ်များကိုသန့်ရှင်းရေး,အစီအစဉ်မှထွက်ပါ。\n";

// နမူနာ:ဆက်သွယ်မှုကိုပိတ်ပါ、သငေ်္ဘာအသွားစာတမ်း、Lock ကိုလွှတ်လိုက်ပါ။
// ဥပမာအားဖြင့်, ဝေးလံခေါင်သီဆက်သွယ်မှုကိုပိတ်ပါ
$endpoint = "https://gitbox.net/api/close";
echo "အနီးကပ်အသိပေးချက်ကိုပေးပို့ပါ $endpoint\n";
// file_get_contents($endpoint); // အမှန်တကယ်အသုံးပြုသောအခါဖွင့်လှစ်နိုင်ပါသည်

4 ။ အဓိကအချက်များဖော်ပြချက်

  • ကြေငြာခြင်း (ticks = 1) သည် signal processor ကိုတစ်ခုချင်းစီကို Execalable ထုတ်ပြန်ချက်တစ်ခုအပြီးတစ်ကြိမ်ခေါ်ဆိုပါလိမ့်မည်

  • ရေရှည်အလုပ်ကိုတိုတောင်းသောအိပ်စက်ခြင်းများကိုချိုးဖောက်ခြင်းအားဖြင့်ကြားဖြတ်အချက်ပြမှုများကိုပိုမိုအချိန်မီတုံ့ပြန်နိုင်သည်။

  • အဓိကကွင်းဆက်သည်ယိုစိမ့်မှုသို့မဟုတ်ပြည်နယ်များကျန်ရှိနေသေးသည်ကိုသေချာစေရန်အတွက်သန့်ရှင်းသောအရင်းအမြစ်များကိုပြုပြင်ပြောင်းလဲခြင်းပြုလုပ်နိုင်သည်။

5 ။ လျှောက်လွှာဇာတ်လမ်းတစ်ပုဒ်

ဤလုပ်ဆောင်မှုသည်အောက်ပါအခြေအနေများတွင်အလွန်လက်တွေ့ကျသည်။

  • ထိုကဲ့သို့သောမက်ဆေ့ခ်ျကိုတန်းစီစားသုံးသူအဖြစ် daemon အခြေစိုက်အလုပ်များ;

  • ရှည်လျားသောမှတ်တမ်းစောင့်ကြည့်လေ့လာရေး scripts;

  • System Managemily command ကိုတုန့်ပြန်စရာမလိုအပ်သော CLI ကိရိယာများ,

  • ကွန်တိန်နာသို့မဟုတ် kubernetes အောက်ရှိ Elegant exit service script ။

6 ။ အကျဉ်းချုပ်

PCNTL_Signal နှင့် PCNTL_Signal_DISWATE ကို PHP တွင် Elegal signal processing interrupt နည်းလမ်းများရရှိရန် Time_NNTL_Signal_Dispatch ဖြင့်အသုံးပြုပါ။ ၎င်းသည် script ကိုတုန့်ပြန်နိုင်ရုံသာမကသန့်ရှင်းရေးမပြုမီအရင်းအမြစ်များကိုအချည်းနှီးရပ်စဲခြင်းပြ problem နာကိုရှောင်ရှားနိုင်သည်။ ဤအလေ့အကျင့်သည်တည်ငြိမ်စွာပြေးရန်လိုအပ်သည့် CLI script ကိုမဆိုမရှိမဖြစ်လိုအပ်သည်။

script ဖွဲ့စည်းပုံကိုပိုကောင်းအောင်ပြုလုပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် PHP scripts ကိုခန့်မှန်းရခက်ဆုံးရပ်စဲခြင်းနှင့်ရင်ဆိုင်ရသောအခါအမှန်တကယ် backend service လုပ်ငန်းစဉ်ကဲ့သို့ပြုမူနေဆဲဖြစ်သည်။