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

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