រៀនពាក្យបញ្ជាលីនុច - រង់ចាំ

ឈ្មោះ

រង់ចាំ 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 ត្រូវបានចាប់។