منبع اصلی نوشتار زیر در این لینک قرار دارد

Process Management


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

مندرجات

  1. مبانی
  2. پرسش‌های ساده
    1. چگونه یک job پس‌زمینه اجرا کنم؟
    2. اسکریپت من یک job در پس‌زمینه اجرا می‌کند. چطور می‌توانم PID آن را به دست آورم؟
    3. خب، من PID آن را دارم. چگونه کنترل کنم که آیا هنوز در حال اجرا می‌باشد؟
    4. می‌خواهم با پردازشی که قبلاً شروع کرده‌ام، کاری انجام بدهم
    5. چگونه پردازش را توسط نام آن kill کنم؟ بیرون رفتن آن از ‎ps aux | grep‎ را لازم دارم ....
    6. اما من روی سیستم قدری قدیمی یونیکس سنتی هستم که pgrep ندارد! چکار کنم؟
    7. می‌خواهم موردی را در پس‌زمینه اجرا کنم و سپس قطع اتصال (log out) کنم.
    8. من سعی می‌کنم job خود را ‎kill -9‎ کنم، اما ...
    9. مطمئن شوید شما این فرمانها را اجرا کرده‌اید و فهمیده‌اید:
  3. پرسش‌های پیشرفته
    1. می‌خواهم دو job را در پس‌زمینه اجرا کنم، و سپس تا پایان یافتن هر دو منتظر بمانم.
    2. چگونه می‌توانم کنترل کنم که اگر سرویس‌دهنده game من هنوز در حال اجرا می‌باشد؟ من یک اسکریپت در crontab قرار بدهم، و اگر در حال اجرا نیست آن را مجدداً راه‌اندازی کنم...
    3. چگونه مطمئن شوم که در یک لحظه فقط یک نسخه از اسکریپت من می‌تواند اجرا گردد؟
    4. می‌خواهم یک دسته از فایلها را به طور موازی پردازش کنم، و موقعی که یکی تمام می‌شود، بعدی را شروع کنم. و می‌خواهم مطمئن شوم در هر لحظه دقیقاً پنج job در حال اجرا می‌باشد.
    5. اسکریپت من یک خط‌لوله را اجرا می‌کند. می‌خواهم وقتی اسکریپت کشته می‌شود، خط‌لوله نیز بمیرد.
  4. چگونگی کار کردن با پردازش ها
    1. PIDها و والدین
    2. ریسک اجازه مردن والد
    3. ریسک تجزیه درخت پردازش
    4. درست انجام بدهید
      1. شروع یک پردازش و به خاطر سپردن PID آن
      2. معاینه کامل پردازش خود یا خاتمه دادن آن
      3. شروع یک سرویس کمکی «daemon» و کنترل آنکه آیا به طور موفق شروع گردیده است
  5. در مورد پردازش‌ها، محیط‌ها و وراثت

مبانی

یک پردازش، نمونهِ در حال اجرایِ یک برنامه در حافظه است. هر پردازش به وسیله یک شماره تحت عنوان PID، یا تعیین کننده هویت پردازش شناخته می‌شود. هر پردازش دارای قطعهِ تخصیص یافته‌ای از حافظه است، که مخصوص خودش می‌باشد، و از سایر پردازشها قابل دستیابی نیست. این جایی است که پردازش متغیرها و سایر داده‌هایش را ذخیره می‌کند.

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

فوق‌داده‌های ذخیره شده توسط کرنل، یک «نام» پردازش و «سطر فرمان» را شامل می‌گردد. این موارد قابل اعتماد نیستند، «نام» پردازش آن است که شما وقتی برنامه را اجرا کردید، بیان نمودید، و ممکن است هیچگونه رابطه‌ای با نام فایل برنامه نداشته باشد. (در برخی سیستم‌ها، پردازشهای در حال اجرا نام خودشان را نیز می‌توانند تغییر بدهند. برای مثال، sendmail از این مورد برای نشان دادن وضعیت خود استفاده می‌کند.) بنابراین، موقع کار با یک پردازش، برای اینکه قادر باشید با آن کاری انجام بدهید باید PID آن را بدانید. جستجوی پردازش‌ها به وسیله نام، به شدت لغزش‌پذیر است.

ادامه مطلب