ဟာ Linux စစ်ဌာနချုပ် Learn - စောင့်ဆိုင်း

အမည်

, waitpid စောင့်ဆိုင်း - အဘို့အစောင့်ဆိုင်း ဖြစ်စဉ်ကို ရပ်စဲ

အနှစ်ချုပ်

#include
#include

pid_t ချောင်းမြောင်း (int * status ကို);
pid_t waitpid (pid_t PID, int * အခြေအနေ, int options များ);

ဖေါ်ပြချက်

ကလေးတစ်ဦးမထွက်မှီတိုင်အောင်, ဒါမှမဟုတ်တစ်ဦး signal ကိုအဘယ်သူ၏အရေးယူလက်ရှိဖြစ်စဉ်ကိုရပ်ဆိုင်းဖို့ဒါမှမဟုတ် function ကိုကိုင်တွယ်နေတဲ့ signal ကိုခေါ်ခြင်းဖြစ်ပါတယ်ကယ်နှုတ်တော်မူ၏ဖြစ်ပါတယ်သည်အထိချောင်းမြောင်း function ကိုလက်ရှိလုပ်ငန်းစဉ်၏ကွပ်မျက်ရပ်ဆိုင်း။ ကလေးတစ်ဦးပြီးသားခေါ်ဆိုမှု (ကဒါခေါ် "ဖုတ်ကောင်" ဖြစ်စဉ်ကို) ၏အချိန်အားဖြင့်မထွက်ပြီဆိုရင်, function ကိုချက်ချင်းပြန်လာ။ ကလေးသူငယ်အခကအသုံးပြုမဆိုသည့်စနစ်အရင်းအမြစ်များကိုလွတ်မြောက်လာကြသည်။

အဆိုပါ PID အငြင်းအခုံများကသတ်မှတ်ထားသောအဖြစ် waitpid function ကိုကလေးတစ်ဦးသည်အထိလက်ရှိလုပ်ငန်းစဉ်၏ကွပ်မျက်ရပ်ဆိုင်းမထွက်ဖြစ်ပါတယ်, ဒါမှမဟုတ်တစ်ဦး signal ကိုအဘယ်သူ၏အရေးယူလက်ရှိဖြစ်စဉ်ကိုရပ်ဆိုင်းဖို့ဒါမှမဟုတ် function ကိုကိုင်တွယ်နေတဲ့ signal ကိုခေါ်ခြင်းဖြစ်ပါတယ်ကယ်နှုတ်တော်မူ၏ဖြစ်ပါတယ်အထိပါပဲ။ PID နေဖြင့်မေတ္တာရပ်ခံအဖြစ်ကလေးတစ်ဦးပြီးသားခေါ်ဆိုမှု (ကဒါခေါ် "ဖုတ်ကောင်" ဖြစ်စဉ်ကို) ၏အချိန်အားဖြင့်မထွက်ပြီဆိုရင်, function ကိုချက်ချင်းပြန်လာ။ ကလေးသူငယ်အခကအသုံးပြုမဆိုသည့်စနစ်အရင်းအမြစ်များကိုလွတ်မြောက်လာကြသည်။

PID ၏တန်ဖိုးတစ်ဦးဖြစ်နိုင်သည်

<-1

အရာသည်အဘယ်သူ၏ဖြစ်စဉ်ကိုအုပျစု ID ကို PID ၏အကြွင်းမဲ့အာဏာတန်ဖိုးညီမျှသည်ဆိုကလေးကဖြစ်စဉ်ကိုစောင့်ဆိုင်းရန်ကိုဆိုလိုပါသည်။

-1

အရာမဆိုကလေးကဖြစ်စဉ်ကိုစောင့်ဆိုင်းဖို့ကိုဆိုလိုတယ်, ဒီပြပွဲစောင့်ဆိုင်းရသောတူညီတဲ့အပြုအမူဖြစ်ပါတယ်။

0 င်

အရာသည်အဘယ်သူ၏ဖြစ်စဉ်ကိုအုပ်စုတစ်စုမဆိုကလေးကဖြစ်စဉ်ကိုစောင့်ဆိုင်းရန်ကိုဆိုလိုပါသည် ID ကို အဆိုပါခေါ်ဆိုမှုလုပ်ငန်းစဉ်၏ကြောင်းနှင့်ညီမျှသည်။

> 0 င်

အရာသည်အဘယ်သူ၏ဖြစ်စဉ်ကို ID ကို PID ၏တန်ဖိုးနှင့်ညီမျှသည်ထိုသူငယ်ကိုစောင့်ဆိုင်းရန်ကိုဆိုလိုပါသည်။

ရွေးချယ်မှုများ၏တန်ဖိုးသည်အောက်ပါရုံကလွဲပြီးသုညသို့မဟုတ်ထိုထက်ပိုတစ်ခု OR ဖြစ်ပါသည်:

WNOHANG

အရာမျှမကလေးသည်မထွက်လျှင်ချက်ချင်းပြန်သွားဖို့ကိုဆိုလိုသည်။

WUNTRACED

အရာကိုလည်းရပ်တန့်နေသောသားသမီးတို့အဘို့ကိုပြန်သွားဖို့ကိုဆိုလိုတယ်နှင့်သူ၏ status ကိုအစီရင်ခံထားမထားပါဘူး။

(Linux ကိုသာရှေးခယျြစရာဘို့, ကိုအောက်တွင်ကြည့်ပါ။ )

status ကို null မဟုတ်ပါဘူးလျှင်, တည်နေရာအတွက်စောင့်ဆိုင်းသို့မဟုတ် waitpid စတိုးဆိုင် status ကိုသတင်းအချက်အလက် status ကိုကထောက်ပြသည်။

ဤသည် status ကိုအောက်ပါဘာလို့လဲဆိုတော့ Micro စနစ်နဲ့အခြားသော (!, ဤဘာလို့လဲဆိုတော့ Micro စနစ်နဲ့အခြားသောအငြင်းအခုံ --- မကြားခံတစ်ဦး pointer အဖြစ် Stat ကြားခံ (တစ်ဦး int) ယူ) နဲ့အကဲဖြတ်နိုင်ပါတယ်:

WIFEXITED (အခြေအနေ)

ကလေးသူငယ်အခပုံမှန်မထွက်လျှင် Non-သုညဖြစ်ပါတယ်။

WEXITSTATUS (အခြေအနေ)

(မှထွက်ရန်ဖုန်းခေါ်ဖို့အငြင်းအခုံကဲ့သို့) သို့မဟုတ်အဓိကအစီအစဉ်တွင်ပြန်လည်ကြေညာချက်အဘို့အငြင်းအခုံအဖြစ်သတ်မှတ်ထားခဲ့ကြရသောရပ်စဲသောသူငယ်၏ပြန်လာကုဒ်၏အနည်းဆုံးသိသိသာသာရှစ် bits သည်တန်ဖိုး။ WIFEXITED Non-သုညပြန်ရောက်လျှင်ဤသည်မက္ကရိုသာအကဲဖြတ်နိုင်ပါတယ်။

WIFSIGNALED (အခြေအနေ)

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

WTERMSIG (အခြေအနေ)

အဆုံးသတ်ခြင်းမှထိုသူငယ်ဖြစ်စဉ်ကိုဖြစ်ပေါ်စေကြောင်းအချက်ပြ၏နံပါတ်ပြန်လည်ရောက်ရှိ။ WIFSIGNALED Non-သုညပြန်ရောက်လျှင်ဤသည်မက္ကရိုသာအကဲဖြတ်နိုင်ပါတယ်။

WIFSTOPPED (အခြေအနေ)

ပြန်လာလက်ရှိရပ်တန့်နေသည်စေသောအရာကလေးကဖြစ်စဉ်ကိုလျှင်စစ်မှန်တဲ့ပြန်လည်ရောက်ရှိ; ခေါ်ဆိုမှု WUNTRACED သုံးပြီးပြုမိခဲ့လျှင်ဒီသာဖြစ်နိုင်သည်။

WSTOPSIG (အခြေအနေ)

ကလေးသူငယ်အခကိုရပ်တန့်စေသောအချက်ပြမှု၏နံပါတ်ပြန်လည်ရောက်ရှိ။ WIFSTOPPED Non-သုညပြန်ရောက်လျှင်ဤသည်မက္ကရိုသာအကဲဖြတ်နိုင်ပါတယ်။

Unix ကအချို့သည်ဗားရှင်း (ဥပမာ Linux, Solaris, ဒါပေမယ့်မရ AIX, SunOS) ကိုလည်းကလေးကဖြစ်စဉ်ကိုအဓိကစွန့်ပစ်ရှိမရှိစမ်းသပ်ဖို့တစ်နိုင်တဲ့ macro WCOREDUMP (အခြေအနေ) define ။ #ifdef WCOREDUMP အတွက်ပူးတွဲဒီ ... #endif သာလျှင်အသုံးပြုပါ။

သို့ပြန်သွားသည် Value ကို

အဆိုပါဖြစ်စဉ်ကိုမထွက်သောသူငယ်၏ ID ကို, ဒါမှမဟုတ်သုည WNOHANG အသုံးပြုခဲ့သည်နှင့်မျှမကလေးသည်မရရှိနိုင်ခဲ့, ဒါမှမဟုတ် -1 အမှားအပေါ် (အမှု errno သင့်လျော်တဲ့တန်ဖိုးသတ်မှတ်ထားတဲ့အတွက်) ပါ။

မှားယွင်းမှုများ

ECHILD

ထိုလုပ်ငန်းစဉ်အတွက်သတ်မှတ်ထားသောလျှင် PID မတည်ရှိသို့မဟုတ်ခေါ်ဆိုမှုလုပ်ငန်းစဉ်၏ကလေးတစ်ဦးမဟုတ်ပါဘူး။ (SIGCHLD များအတွက်အရေးယူမှု SIG_IGN ဟုသတ်မှတ်လျှင်ဤသည်တဦးတည်းရဲ့ကိုယ်ပိုင်လေးအတွက်ဖြစ်ပျက်နိုင်ပါတယ်။ ဒါ့အပြင်ချည် ပတ်သက်. Linux မှတ်စုများအပိုင်းကိုကြည့်ပါ။ )

EINVAL

ရှေးခယျြစရာအငြင်းအခုံမမှန်ကန်ပါလျှင်။

EINTR

WNOHANG မသတ်မှတ်ခံခဲ့ရကာပြန်ဖွင့် signal ကိုတစ်ခုသို့မဟုတ် SIGCHLD ဖမ်းမိခဲ့သည်။ လျှင်