آموزش لینوکس - صبر کنید

نام

صبر کنید، صبر کنید - منتظر پایان خدمت است

خلاصه داستان

#include
#include

pid_t صبر کنید (int * status
pid_t waitpid (pid_t pid ، int * وضعیت ، گزینه int

شرح

تابع انتظار متوقف کردن اجرای فرایند فعلی را تا زمانی که یک کودک خارج شده است یا تا زمانی که یک سیگنال تحویل داده شود که اقدام به پایان دادن به روند فعلی یا تماس گرفتن از یک عملکرد انتقال سیگنال است. اگر یک کودک قبل از زمان تماس (فرآیند به اصطلاح "زامبی") از آن خارج شده باشد، تابع بلافاصله برمیگردد. هر گونه منابع سیستم مورد استفاده توسط کودک آزاد می شود.

تابع waitbit تعلیق اجرای پروسۀ فعلی را تا زمانی که یک فرزند به عنوان مشخص شده توسط arg argument خروج کرده است، یا تا زمانی که یک سیگنال تحویل داده شود که اقدام به خاتمه فرایند فعلی یا تماس با عملکرد تابع انتقال سیگنال است. اگر یک کودک به عنوان درخواست از pid قبلا توسط زمان تماس (یک فرایند به اصطلاح "زامبی") خروج کرده باشد، تابع بلافاصله باز می گردد. هر گونه منابع سیستم مورد استفاده توسط کودک آزاد می شود.

ارزش pid می تواند یکی از موارد زیر باشد:

<-1

که بدان معنی است که برای هر پروسه فرزند صبر کنید که ID گروه پردازش آن برابر با مقدار مطلق pid است .

-1

که بدان معنی است که برای هر پروسه فرزند صبر کنید این همان رفتار است که منتظر نمایش است.

0

که بدان معنی است که برای هر پروسه فرزند صبر کنید که شناسه پردازش گروه پردازش آن برابر است با پروسه فراخوانی.

> 0

که بدان معنی است که برای کودک صبر کنید که ID روند آن برابر با pid است .

مقدار گزینه ها OR از صفر یا بیشتر از ثابت های زیر است:

WNOHANG

که بدان معنی است که بلافاصله پس از خروج از کودک خارج شود.

WUNTRACED

که بدان معنی است که برای بچه هایی که متوقف شده اند، بازگردانده شده اند و وضعیت آنها گزارش نشده است.

(برای گزینه های لینوکس فقط زیر را ببینید.)

اگر وضعیت NULL نیست، اطلاعات وضعیت فروشگاه منتظر یا صبر کنید در مکان مشخص شده توسط وضعیت .

این وضعیت را می توان با ماکروهای زیر ارزیابی کرد (این ماکروها بافر stat ( int ) به عنوان یک argument --- نه اشاره گر به بافر!

WIFEXITED ( وضعیت )

اگر کودک به طور عادی خارج شود، صفر نیست.

WEXITSTATUS ( وضعیت )

به حداقل هشت بیت از کد بازگشت کودک که پایان داده شده است، که ممکن است به عنوان استدلال برای فراخوانی برای خروج () تنظیم شده باشد یا به عنوان استدلال برای عبارت بازگشت در برنامه اصلی، ارزیابی شود. اگر WIFEXITED غیر صفر باشد، این کلان تنها می تواند ارزیابی شود.

WIFSIGNALED ( وضعیت )

اگر پروسس فرزند به علت سیگنالی که گرفتار نشد، درست جواب می دهد.

WTERMSIG ( وضعیت )

تعداد سیگنال هایی را که موجب فرایند فرزند شده است را بر می گرداند. اگر WIFSIGNALED غیر صفر باشد، این کلان تنها می تواند ارزیابی شود.

WIFSTOPPED ( وضعیت )

اگر فرزندی که روند بازگشت را در حال حاضر متوقف می کند، درست می شود. این تنها زمانی امکان پذیر است که تماس با استفاده از WUNTRACED انجام شود.

WSTOPSIG ( وضعیت )

تعداد سیگنال هایی را که فرزند را متوقف می کند به ارمغان می آورد. اگر WIFSTOPPED غیر صفر باشد، این کلان تنها می تواند ارزیابی شود.

بعضی از نسخه های یونیکس (مانند لینوکس، سولاریس، اما نه AIX، SunOS) همچنین WCOREDUMP ( وضعیت ) را تعریف می کنند تا آزمایش کنند که آیا فرزند هسته را تخریب می کند. فقط این را در #ifdef WCOREDUMP ... #endif استفاده کنید.

ارزش بازگشت

شناسه فرایند کودک که از آن خارج شد، یا صفر اگر WNOHANG مورد استفاده قرار گرفت و هیچ کودک در دسترس نبود، یا -1 در خطا (در این صورت errno به مقدار مناسب تنظیم شده است).

خطاها

ECHILD

اگر روند مشخص شده در pid وجود ندارد و یا فرزند پروسه فراخوانی نیست. (اگر برای SIGCHLD برای SIG_IGN تنظیم شده باشد (این می تواند برای فرزند خود اتفاق بیافتد. همچنین در بخش LINUX NOTES در مورد موضوعات استفاده کنید.)

EINVAL

اگر پاراگراف گزینه نامعتبر بود

EINTR

اگر WNOHANG تنظیم نشد و یک سیگنال تکذیب شد یا یک SIGCHLD گرفتار شد.