دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۱
  • اسفند

جلسه ۳۰ : Signal ها و Trap ها در یونیکس (UNIX)

  • دسته‌بندی‌ها :
جلسه ۳۰ : Signal ها و Trap ها در یونیکس (UNIX)
    • جزئیات
    • نوع محتواآموزشی

      دوستان و علاقمندان به مباحث آموزش یونیکس (UNIX) ، این آموزش را از سایت پی وی لرن دنبال خواهیم نمود. Signal ها و Trap ها در یونیکس (UNIX) را در این  بخش از آموزش مورد بررسی قرار خواهیم داد. با ما همراه باشید.

      Signal ها و Trap ها در یونیکس (UNIX)

      در این بخش، در مورد جزئیات Signal ها و Trap ها در یونیکس (UNIX) به تفصیل صحبت خواهیم کرد.

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

      در جدول زیر سیگنال های متداولی که ممکن است با آن ها روبرو شوید و می توانید در برنامه های خود استفاده کنید آورده شده است.

      نام سیگنالشماره سیگنالشرح
      SIGHUP۱متوقف کردن تشخیص کنترل ترمینال یا مرگ فرآیند کنترل.
      SIGINT۲اگر کاربر سیگنال قطع (Ctrl + C) را ارسال کند صادر می شود.
      SIGQUIT۳در صورتی که کاربر سیگنال خروج (Ctrl + D) ارسال کند، صادر می شود.
      SIGFPE۸در صورت تلاش برای عملیات ریاضی غیر مجاز صادر می شود.
      SIGKILL۹در صورتی که یک فرآیند این سیگنال را دریافت کند ، باید فوراً خارج شود و هیچ عملیاتی برای پاکسازی انجام نمی دهد.
      SIGALRM۱۴Alarm clock signal (برای تایمر استفاده می شود)
      SIGTERM۱۵سیگنال خاتمه نرم افزار (ارسال شده توسط kill به طور پیش فرض)

      لیست سیگنال ها

      یک روش آسان برای لیست کردن تمام سیگنال های پشتیبانی شده توسط سیستم شما وجود دارد. تنها دستور kill -l را صادر کنید تا تمام سیگنال های پشتیبانی شده، نشان داده شود.

      مثال : 

      لیست واقعی سیگنال ها بین Solaris ، HP-UX و Linux متفاوت است.

      عملیات پیش فرض

      هر سیگنال یک عمل پیش فرض مرتبط با آن را دارا می باشد. عملکرد پیش فرض برای یک سیگنال عملی است که یک اسکریپت یا برنامه هنگام دریافت سیگنال انجام می دهد.

      برخی از اقدامات پیش فرض ممکن است به شکل زیر باشند.

      • خاتمه دادن روند
      • رد کردن سیگنال
      • Dump core. این هنگام دریافت سیگنال ، فایلی به نام core را ایجاد می کند که حاوی تصویر حافظه فرایند است.
      • استاپ کردن فرایند
      • ادامه دادن یک فرایند متوقف شده

      ارسال سیگنال

      چندین روش برای ارسال سیگنال به یک برنامه یا اسکریپت وجود دارد. یکی از رایج ترین ها این است که کاربر در حین اجرای یک اسکریپت ، CONTROL-C یا کلید INTERRUPT را تایپ کند.

      هنگامی که کلید Ctrl + C را فشار می دهید ، یک SIGINT به اسکریپت ارسال می شود و مطابق تنظیمات پیش فرض تعریف شده خاتمه می یابد.

      روش متداول دیگر برای ارسال سیگنال استفاده از دستور kill است که سینتکس آن به شرح زیر است.

      مثال : 

      در این جا signal شماره یا نام سیگنال برای دیلیور است و pid فرایند ID است که سیگنال باید به آن فرستاده شود. برای مثال:

      مثال : 

      دستور فوق سیگنال HUP یا سیگنال را برای برنامه ای که با فرایند ID 1001 در حال اجرا است متوقف می کند. برای ارسال سیگنال kill به همان فرآیند ، از دستور زیر استفاده کنید.

      مثال : 

      این فرایند در حال اجرا را با ID 1001 می کشد.

      مبحث Signal ها و Trap ها در یونیکس (UNIX) را ادامه می دهیم.

      به دام انداختن (Trapping) سیگنال ها

      هنگامی که در زمان اجرای برنامه شل، کلید Ctrl + C یا کلید Break را در ترمینال خود فشار می دهید ، به طور معمول آن برنامه بلافاصله خاتمه می یابد و فرمان prompt شما برمی گردد. این ممکن است همیشه مطلوب نباشد.

      به دام انداختن این سیگنال ها بسیار آسان است ، و دستور trap دارای سینتکس زیر می باشد.

      مثال : 

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

      دو استفاده ی معمول برای trap  در شل اسکریپت ها وجود دارد.

      • کلین آپ فایل های موقتی
      • نادیده گرفتن سیگنال ها

      پاک کردن فایل های موقتی

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

      مثال : 

      از آن جا که در برنامه shell که این trap اجرا شده است ، در صورت دریافت سیگنال شماره ۲ توسط برنامه ، دو فایل work1$$ و $$dataout به طور خودکار حذف می شود.

      از این رو ، اگر کاربر بعد از اجرای این trap ، اجرای برنامه را قطع کند ، می توانید اطمینان داشته باشید که این دو فایل کلین آپ می شوند. فرمان خروجی که از rm پیروی می کند ضروری است زیرا بدون آن ، اجرا در برنامه در نقطه ای که، هنگام دریافت سیگنال قطع شده ، ادامه می یابد.

      سیگنال شماره ۱ برای hangup تولید می شود. یا کسی عمدا خط را متوقف کرده یا خط به طور تصادفی قطع می شود.

      می توانید trap قبلی را تغییر دهید تا با اضافه کردن سیگنال شماره ۱ به لیست سیگنال ها ، دو فایل مشخص در این حالت نیز حذف شود.

      مثال : 

      در صورت قطع شدن خط یا فشار دادن کلید Ctrl + C ، این فایل ها حذف می شوند.

      در صورتي كه بيش از يك دستور باشد ، دستورات مشخص شده براي trap بايد به صورت نقل قول محصور شوند. همچنین توجه داشته باشید که شل در زمان اجرای فرمان trap و همچنین در هنگام دریافت یکی از سیگنال های ذکر شده ، خط فرمان را اسکن می کند.

      بنابراین ، در مثال قبلی ، مقدار WORKDIR و $ $ در زمان اجرای دستور trap جایگزین می شوند. اگر می خواهید این تعویض در زمانی رخ دهد که سیگنال ۱ یا ۲ دریافت شده ، می توانید دستورات را به صورت تک نقل قول قرار دهید.

      مثال : 

      Signal ها و Trap ها در یونیکس (UNIX) را با مبحث نادیده گرفتن سیگنال ها ادامه می دهیم.

      نادیده گرفتن سیگنال ها

      اگر دستور ذکر شده برای trap تهی (null) باشد ، سیگنال مشخص شده هنگام دریافت نادیده گرفته می شود. به عنوان مثال ، دستور زیر را بررسی نمایید.

      مثال : 

      این مشخص می کند که سیگنال قطع باید نادیده گرفته شود. ممکن است بخواهید هنگام انجام عملیاتی که نمی خواهید قطع شود ، سیگنال های خاصی را نادیده بگیرید. می توانید چندین سیگنال را مشخص کنید که به شرح زیر نادیده گرفته می شوند.

      مثال : 

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

      مثال : 

      اگر سیگنالی را نادیده بگیرید ، همه زیر شل ها (subshells) نیز آن سیگنال را نادیده می گیرند. با این حال ، اگر اقدامی را برای دریافت سیگنال انجام دهید ، همه subshell ها هنوز در مورد دریافت آن سیگنال، اقدام پیش فرض را دریافت می کند.

      باز نشانی Trap ها

      بعد از این که اقدام پیش فرض مورد نیاز دریافت سیگنال را تغییر دادید ، اگر اولین آرگومان را حذف کنید ، می توانید دوباره آن را با trap تغییر دهید. بنابراین :

      مثال : 

      این اکشن را بازنشانی می کند برای دریافت سیگنال های ۱ یا ۲ به حالت پیش فرض.

      کلام پایانی

      مبحث Signal ها و Trap ها در یونیکس (UNIX) را در این بخش از آموزش مورد بررسی قرار دادیم. دوستان متشکریم از این که با دوره ی آموزش یونیکس همراه وب سایت پی وی لرن بودید. با سایر دوره های آموزشی ما نیز همراه باشید.

      QR:  جلسه ۳۰ : Signal ها و Trap ها در یونیکس (UNIX)
      به اشتراک بگذارید