Linux විධානය ඉගෙන ගන්න - බලා සිටින්න

නම

wait, waitpid - ක්රියාවලිය අවසන් කිරීම බලා සිටින්න

සාරාංශය

#include
#include

pid_t wait (int * තත්වය );
pid_t waitpid (pid_t pid , int * තත්වය , int විකල්පයන් );

විස්තර

දරුවා ක්රියා විරහිත කර ඇති අතර, දැනට පවතින ක්රියාදාමය අවසන් කිරීම හෝ සංඥා කිරීමේ හැසිරීමේ ක්රියාවලියක් ඇමතීම සිදු කරනු ලබන ක්රියාකාරීත්වය අවසන් වන තෙක් බලා සිටින ක්රියාකාරීත්වයේ ක්රියාකාරීත්වයේ ක්රියාකාරිත්වය වලක්වනු ලබයි. ඇමතුමක කාලය වන විට ළමයා දැනටමත් පිටව ගොස් තිබේ නම් (ඊනියා "zombie" ක්රියාවලිය) වහාම ක්රියාත්මක වේ. දරුවා භාවිතා කරන ඕනෑම සම්පත් පද්ධතියක් නිදහස් කරනු ලැබේ.

Pid තර්කය මඟින් නිශ්චය කර ඇති දරුවා පිටත්වන තෙක් waitpid ක්රියාමාර්ගය වත්මන් ක්රියාවලිය ක්රියාත්මක කිරීම අත් හිටුවා නැත , හෝ වත්මන් ක්රියාවලිය අවසන් කිරීම හෝ සංඥා මෙහෙයවීමේ ක්රියාවලියක් ඇමතීම සඳහා සංඥාවක් ලබාදෙන තුරු. PID විසින් ඉල්ලා සිටින ආකාරයට දරුවෙකු දැනටමත් ඇමතුම වන විටදී පිටව ගොස් ඇත (ඊනියා "zombie" ක්රියාවලිය) වහාම ක්රියාත්මක වේ. දරුවා භාවිතා කරන ඕනෑම සම්පත් පද්ධතියක් නිදහස් කරනු ලැබේ.

Pid වල අගය එක් එකක් විය හැකිය:

<-1

එනම් ක්රියාවලි කණ්ඩායම් හැඳුනුම් අංකය pid නිරපේක්ෂ වටිනාකමට සමාන වේ.

-1

එනම් ඕනෑම ළමා ක්රියාවලියක් බලා සිටීමයි; මෙම ප්රදර්ශන සඳහා බලා සිටින එකම හැසිරීම මෙයයි.

0

එනම් ක්රියාකාරී කණ්ඩායම් හැඳුනුම්පත ඇමතුම් ක්රියාවලියට සමාන ඕනෑම ළමා ක්රියාවලියක් බලා සිටීමයි.

> 0

එනම්, pid වල අගය ක්රියාකාරී ID වල දරුවාට බලා සිටීමයි.

විකල්පයන් සඳහා පහත සඳහන් නියත වල ශුන්යය හෝ ඊට වැඩි ගණනක් OR:

ඩබ්ලිව්

දරුවා පිටතට නොගියොත් වහාම ආපසු පැමිණීමට අදහස් කරයි.

වැනසුයි

එයින් අදහස් වන්නේ නැවත්වන දරුවන්ට ආපසු පැමිණීමට සහ තත්වය ගැන වාර්තා වී නොමැති බවයි.

(ලිනක්ස්-විකල්පයන් සඳහා පහත බලන්න.)

තත්වය NULL නොවේ නම්, තත්වය හෝ තත්වය පෙන්වනු ලබන ස්ථානයේ ඇති waitpid ගබඩා තත්ත්ව තොරතුරු.

මෙම තත්ත්වය පහත දැක්වෙන මැක්රෝස් සමඟ ඇගයීමට ලක් කළ හැක (මෙම මැක්රෝස් පරාමිතිය ලෙස stat බෆරයක් ( int ) යනු බෆරයට දර්ශකය නොවේ):

WIFEXITED ( තත්වය )

සාමාන්යයෙන් දරුවා පිටව ගියොත් එය ශුන්ය නොවේ.

වෙක්ස්ටිට්ස් ( තත්වය )

අවසන් කළ දරුවාගේ ආපසු කේතය අවම වශයෙන් සැලකිය යුතු අටක අගයක් ගනී. මෙය පිටතට කැඳවීමට ඇමතුම () හෝ ප්රධාන වැඩසටහනේ ප්රතිලාභ ප්රකාශය සඳහා තර්කයක් ලෙස විය හැකිය. WIFEXITED නිකුතුවෙන් ආපසු හැරී ඇත්නම් මෙම වක්රෝනය පමණක් ඇගයීමට ලක් කළ හැකිය.

ඩිප්ලෝමා ( තත්වය )

දරුවාගේ ක්රියාවලිය පිටතට නොගත් සංඥාවක් නිසා පිටතට ගියොත් එය සත්යයක්.

WTERMSIG ( තත්ත්වය )

දරුවාගේ ක්රියාව අවසන් කිරීමට හේතු වූ සංඥාවේ අංකය නැවත ලබා ගනී. WIFSIGNALED ශුන්ය නොවන විට මෙම සාර්වනය කළ හැක්කේ ඇගයීම පමණි.

WIFSTOPPED ( තත්වය )

ආපසු පැමිණීමට හේතු වූ දරුවෙකුගේ ක්රියාවලිය දැනට නතර කර තිබේ නම්, එය නැවත සත්ය කරවයි. මෙම ඇමතුම WUNTRACED භාවිතා කළ විට පමණක් එය කළ හැකිය.

WSTOPSIG ( තත්වය )

දරුවා නතර කිරීමට හේතු වූ සංඥාවේ අංකය නැවත ලබා ගනී. WIFSTOPPED ශුන්ය නොවේ නම් මෙම සාර්ව අගය කළ හැක්කේ එය පමණි.

Unix හි සමහර අනුවාද (උදා. Linux, Solaris, නමුත් AIX, SunOS නොවේ) මැක්රෝ WCOREDUMP ( තත්වය ) නිර්වචනය කරයි. #ifdef WCOREDUMP ... #endif හි ඇති මෙය භාවිතා කරන්න.

ප්රතිලාභ අගය

WNOHANG භාවිතා කරන ලද දරුවෙකුගේ ක්රියාවලි හැඳුනුම් අංකය හෝ දරුවා නොමැති විය, නැතහොත් -1 මත දෝෂයක් ( උදාහරණ වශයෙන් errno සුදුසු වටිනාකමක් ලබා දෙයි).

වැරදි

ECHILD

නිශ්චිතව දක්වා ඇති ක්රියාවලිය නම් PID නොපවතී හෝ ඇමතුම් ක්රියාවලියේ දරුවෙකු නොවේ. (SIGCHLD සඳහා වූ ක්රියාව SIG_IGN ලෙස සකසා ඇත්නම්, එය ඔවුන්ගේම දරුවාට සිදුවිය හැක.) නූල් පිළිබඳ ලින්ක්ස් සටහන් සටහන් බලන්න.)

EINVAL

විකල්ප පරාමිතිය වලංගු නොවේ නම්.

EINTR

WNOHANG නැවතුම්පලක් නොතිබුණි නම්, වාරණයට ලක්වූ සංඥාවක් හෝ SIGCHLD හසු විය.