ឈ្មោះ
រង់ចាំ waitpid - រង់ចាំសម្រាប់ ការ បញ្ចប់ ដំណើរការ
សង្ខេប
#include
#include
រង់ចាំ pid_t (int * status );
pid_t waitpid (pid_t pid , int * status , int options );
ការពិពណ៌នា
មុខងារ រង់ចាំ ផ្អាកដំណើរការនៃដំណើរការបច្ចុប្បន្នរហូតដល់កូនបានចេញឬរហូតដល់សញ្ញាត្រូវបានបញ្ជូនដែលសកម្មភាពត្រូវបញ្ចប់ដំណើរការបច្ចុប្បន្នឬហៅមុខងារដោះស្រាយសញ្ញា។ ប្រសិនបើកុមារបានចាកចេញដោយពេលវេលានៃការហៅ (ដំណើរការហៅថា "ខ្មោចឆៅ") មុខងារត្រឡប់មកវិញភ្លាមៗ។ ធនធានប្រព័ន្ធណាមួយដែលប្រើដោយកុមារត្រូវបានដោះលែង។
អនុគមន៍ waitpid ផ្អាកការប្រតិបត្តិនៃដំណើរការបច្ចុប្បន្នរហូតដល់កុមារដែលបានបញ្ជាក់ដោយអាគុយម៉ង់ pid ចេញឬរហូតដល់សញ្ញាត្រូវបានបញ្ជូនដែលសកម្មភាពត្រូវបញ្ចប់ដំណើរការបច្ចុប្បន្នឬហៅមុខងារដោះស្រាយសញ្ញា។ ប្រសិនបើក្មេងដែលត្រូវបានស្នើសុំដោយ pid ត្រូវបានចាកចេញរួចទៅហើយដោយពេលវេលានៃការហៅ (ដំណើរការដែលគេហៅថា "zombie"), មុខងារត្រឡប់មកវិញភ្លាមៗ។ ធនធានប្រព័ន្ធណាមួយដែលប្រើដោយកុមារត្រូវបានដោះលែង។
តម្លៃរបស់ pid អាចជាផ្នែកមួយនៃ:
<-1
ដែលមានន័យថាត្រូវរង់ចាំដំណើរការកូនណាដែលលេខសម្គាល់ដំណើរការក្រុមស្មើនឹងតម្លៃដាច់ខាតនៃ pid ។
-1
ដែលមានន័យថាត្រូវរង់ចាំដំណើរការកូន ៗ ។ នេះគឺជាអាកប្បកិរិយាដូចគ្នាដែល រង់ចាំ ការតាំងពិពណ៌។
0
ដែលមានន័យថារង់ចាំសម្រាប់ដំណើរការកូនណាដែលមាន លេខសម្គាល់ ក្រុមដំណើរការស្មើនឹងដំណើរការហៅ។
> 0
ដែលមានន័យថារង់ចាំសម្រាប់កូនដែលលេខសម្គាល់ដំណើរការរបស់វាគឺស្មើនឹងតម្លៃរបស់ pid ។
តម្លៃនៃ ជម្រើស គឺជា OR នៃសូន្យឬច្រើននៃចំនួនថេរដូចខាងក្រោម:
WNOHANG
ដែលមានន័យថាត្រលប់មកវិញភ្លាមប្រសិនបើគ្មានកូនទេ។
WUNTRACED
ដែលមានន័យថាក៏ត្រលប់មកវិញសម្រាប់កុមារដែលត្រូវបានបញ្ឈប់និងស្ថានភាពដែលមិនត្រូវបានរាយការណ៍។
(សម្រាប់ជម្រើសតែលីនុចសូមមើលខាងក្រោម។ )
ប្រសិនបើ ស្ថានភាព មិនមែន NULL សូម រង់ចាំ ឬ រង់ចាំ ពត៌មានស្ថានភាពរបស់ហាងនៅក្នុងទីតាំងដែលចង្អុលដោយ ស្ថានភាព ។
ស្ថានភាពនេះអាចត្រូវបានវាយតំលៃដោយម៉ាក្រូដូចខាងក្រោម (ម៉ាក្រូទាំងនេះយកសតិបណ្តោះអាសន្ន ( int ) ជាអាគុយម៉ង់មួយ --- មិនមែនជាទស្សន៍ទ្រនិចទៅសតិបណ្ដោះអាសន្នទេ!):
WIFEXITED ( ស្ថានភាព )
គឺមិនមែនសូន្យទេបើកូនចេញធម្មតា។
WEXITSTATUS ( ស្ថានភាព )
វាយតំលៃយ៉ាងហោចណាស់ 8 ប៊ីតនៃកូដត្រឡប់របស់កូនដែលបានបញ្ចប់ដែលអាចត្រូវបានកំណត់ជាអាគុយម៉ង់ទៅការហៅ ចេញ () ឬជាអាគុយម៉ង់សម្រាប់សេចក្តីថ្លែងការ វិលត្រឡប់ ក្នុងកម្មវិធីមេ។ ម៉ាក្រូនេះអាចត្រូវបានវាយតម្លៃប្រសិនបើ WIFEXITED ត្រឡប់មិនមែនសូន្យ។
WIFSIGNALED ( ស្ថានភាព )
ត្រឡប់ true ប្រសិនបើដំណើរការកូនចេញដោយសារតែសញ្ញាដែលមិនត្រូវបានចាប់។
WTERMSIG ( ស្ថានភាព )
ត្រឡប់ចំនួនសញ្ញាដែលបណ្តាលឱ្យដំណើរការកូនបញ្ចប់។ ម៉ាក្រូនេះអាចត្រូវបានវាយតម្លៃប្រសិនបើ WIFSIGNALED បាន ត្រឡប់មិនមែនសូន្យ។
WIFSTOPPED ( ស្ថានភាព )
ត្រឡប់ត្រឹមត្រូវប្រសិនបើដំណើរការកូនដែលបណ្តាលមកពីការត្រឡប់មកវិញត្រូវបានបញ្ឈប់នៅពេលបច្ចុប្បន្ន។ នេះអាចធ្វើទៅបានលុះត្រាតែការហៅបានបញ្ចប់ដោយប្រើ WUNTRACED ។
WSTOPSIG ( ស្ថានភាព )
ត្រឡប់ចំនួនសញ្ញាដែលបណ្តាលឱ្យកុមារឈប់។ ម៉ាក្រូនេះអាចត្រូវបានវាយតម្លៃបានប្រសិនបើ WIFSTOPPED មិនបានសូន្យ។
កំណែរបស់យូនីកមួយចំនួន (ឧ។ លីនុច, Solaris, ប៉ុន្តែមិន AIX, SunOS) ក៏កំណត់ម៉ាក្រូ WCOREDUMP ( ស្ថានភាព ) ដើម្បីសាកល្បងថាតើដំណើរការកូនក្មេងបានបោះចោលស្នូល។ ប្រើតែបិទនៅ #ifdef WCOREDUMP ... #endif ។
តម្លៃត្រឡប់
លេខសម្គាល់ដំណើរការរបស់កុមារដែលបានចេញឬលេខសូន្យបើសិនជា WNOHANG ត្រូវបានគេប្រើហើយគ្មានកូនទេរឺ -1 ដោយសារកំហុសឆ្គង (ករណីដែល errno ត្រូវបានកំណត់ទៅតម្លៃសមរម្យ) ។
កំហុស
ECHILD
ប្រសិនបើដំណើរការដែលបានបញ្ជាក់នៅក្នុង pid មិនមានឬមិនមែនជាកូននៃដំណើរការហៅ។ (នេះអាចកើតឡើងចំពោះកូនផ្ទាល់ខ្លួនរបស់អ្នកប្រសិនបើសកម្មភាពសម្រាប់ SIGCHLD ត្រូវបានកំណត់ទៅ SIG_IGN ។ សូមមើលផងដែរអំពីផ្នែករបស់ LINUX NOTES អំពីប្រធានបទ។ )
EINVAL
ប្រសិនបើអាគុយម៉ង់ ជម្រើស មិនត្រឹមត្រូវ។
EINTR
ប្រសិនបើ WNOHANG មិនត្រូវបានកំណត់ហើយសញ្ញាដែលមិនត្រូវបានរារាំងឬ SIGCHLD ត្រូវបានចាប់។