فرایند فرزند: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
FreshmanBot (بحث | مشارکت‌ها)
جز ←‏top: اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
خط ۱:
در [[رایانش]]، '''فرایند فرزند''' به [[فرایند (علوم رایانه)|فرایندی]] گفته می‌شود که توسط [[فرایند والد|یک فرایند دیگر]] بوجود آمده باشد.
 
یک فرایند فرزند، بسیاری از خصوصیاتش را از فرایند والد به ارث می‌برد. از جمله این خصوصیات که از فرایند والد به فرایند فرزند به ارث می‌رسند می‌توان به [[توصیف‌گر پرونده|توصیف‌گرهای پرونده]] اشاره کرد. در [[سیستم‌عامل]] [[یونیکس]] و سیستم‌عامل‌های سازگار با استاندارد [[پازیکس]]، یک فرایند فرزند معمولامعمولاً به صورت یک کپی از فرایند والد و با استفاده از یک [[فراخوان سیستمی]] به نام [[fork (فراخوان سیستمی)|fork(){{چر}}]] ایجاد می‌شود. در مرحله بعد، فرایند فرزند می‌تواند خودش را با یک برنامه دلخواه جایگزین کند. این کار با استفاده از فراخوان سیستمی [[exec]] صورت می‌گیرد.
 
هر فرایند می‌تواند به تعداد دلخواهی فرایند فرزند ایجاد کند (تا وقتی که محدودیت سیستمی اجازه دهد). همچنین فرایندهای فرزند هم می‌توانند به نوبه خود فرایندهای فرزند دیگری ایجاد کنند. به این ترتیب یک ساختار [[درخت (ساختار داده)|درختی]] از فرایندها در سیستم ایجاد خواهد شد. اما هر فرایند تنها و تنها می‌تواند ''یک'' فرایند والد داشته باشد. اگر فرایندی، والد نداشته باشد، معمولامعمولاً به این معنی خواهد بود که فرایند مورد نظر مستقیما توسط [[هسته سیستم‌عامل]] ایجاد شده استشده‌است. در بیشتر سیستم‌عامل‌ها، از جمله [[لینوکس]] و [[بی‌اس‌دی]]، اولین فرایند در هنگام بوت شدن سیستم توسط هسته بوجود می‌آید و هرگز نابود نمی‌شود. به این فرایند خاص [[اینیت]] می‌گویند که والد همه فرایندهای دیگر است و تمام فرایندها از آن سرچشمه می‌گیرند. فرایندهای بدون والد دیگری هم ممکن است به منظور انجام دادن کارهای خاصی در [[فضای کاربری]] بوجود آیند. اگر والد یک فرایند زودتر از خودش خاتمه یابد، فرایند مورد نظر به یک [[فرایند یتیم]] تبدیل خواهد شد. در صورت پیش آمدن چنین موقعیتی، فرایند اینیت جای والد از بین رفته را خواهد گرفت و به عنوان والد جدید فرایند یتیم اداره آن را بر عهده خواهد گرفت.
 
وقتی که اجرای یک فرایند فرزند خاتمه می‌یابد، دچار وقفه شود یا اینکه پس از وقفه اجرای آن ادامه یابد، یک سیگنال SIGCHLD به والدش ارسال خواهد شد. اگر فرایند والد این سیگنال را اداره نکند، به شکل پیشفرض سیگنال نادیده گرفته خواهد شد. <ref>{{man|7|signal||overview of signals}}</ref>
 
وقتی که فرایند فرزندی، قبل از اینکه والدش [[wait]] را اجرا کند، خاتمه یابد، هسته برخی از اطلاعات مربوط به فرایند فرزند را حفظ می‌کند، از جمله [[وضعیت خروج]] فرایند فرزند خاتمه یافته را. این کار به این منظور صورت می‌گیرد که والد بعدا بتواند wait(){{چر}} را اجرا کند<ref name="man2wait">{{man|2|wait||wait for process to change state}}</ref> و آن اطلاعات حفظ شده را بدست آورد و بر طبق آنهاآن‌ها واکنش مناسبی نشان دهد. به خاطر اینکه فرایند فرزند (که خاتمه یافته) هنوز هم از منابع سیستم استفاده می‌کند، اما دیگر در حال اجرا نیست، تبدیل به یک [[فرایند زامبی]] می‌شود. فراخوان سیستمی wait معمولامعمولاً در روال وقفه‌گیر SIGCHLD اجرا می‌شود.
 
== منابع ==