خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

تولید و مدیریت سیگنال لینوکس توضیح داده شده است

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

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

بیایید عمیقاً در مکانیزم سیگنال دهی در لینوکس غوطه ور شویم و بفهمیم که در پشت صحنه چه می گذرد.

مفاهیم اولیه سیگنال در لینوکس

در لینوکس، فرآیندها در سه وضعیت اساسی سیگنال تولید می کنند:

  • هنگامی که یک موقعیت استثنایی در سمت سخت افزار رخ می دهد. به عنوان مثال، می توانید به رویدادهایی مانند تلاش برنامه برای دسترسی به منطقه ای خارج از فضای آدرس مجاز (عیب قطعه بندی) یا تولید کد ماشین که شامل عملیات تقسیم بر صفر است فکر کنید.
  • موقعیت هایی مانند استفاده از کلیدهای ترکیبی مانند Ctrl + C یا Ctrl + Z در کنسول توسط کاربر، تغییر اندازه صفحه کنسول یا ارسال سیگنال کشتن.
  • تایمر تنظیم شده در برنامه منقضی می شود، محدودیت CPU داده شده به برنامه بالا است، داده ها به یک توصیفگر فایل باز می آیند و غیره.

مفهوم سیگنال از نسخه های اولیه یونیکس وجود داشته است. پیش از این، چندین تفاوت بین نسخه های یونیکس در مورد پردازش سیگنال وجود داشت. بعداً با استانداردسازی POSIX برای مدیریت سیگنال، لینوکس و سایر مشتقات یونیکس از این استانداردها پیروی کردند. به همین دلیل، مفاهیم سیگنال های یونیکس و سیگنال های POSIX که ممکن است در برخی اسناد با آنها مواجه شوید، به تفاوت هایی اشاره دارد.

مطلب مرتبط:   گنوم 43 با رابط کاربری اصلی دسکتاپ لینوکس، ارتقای امنیت دستگاه

شماره های سیگنال

سیگنال ها مقادیر عددی مختلفی دارند که با یک شروع می شود. به عنوان مثال، سیگنال 1 تقریباً در هر سیستمی یک سیگنال HUP است یا سیگنال 9 یک سیگنال KILL است.

با این حال، هنگامی که از سیگنال ها در برنامه های خود استفاده می کنید، استفاده از این اعداد به شدت منع می شود. برای سیگنال های POSIX، فایل signal.h باید در برنامه باشد و توسعه دهنده باید به جای آن از تعاریف ثابت اعداد مرتبط مانند SIGHUP، SIGKILL و غیره استفاده کند.

اگر فایل /usr/include/signal.h را روی سیستم خود بررسی کنید، می توانید عملیات اضافی و سایر فایل های موجود را با مشاهده تعاریف مقادیری مانند __USE_POSIX، __USE_XOPEN، __USE_POSIX199309 و غیره در فایل مشاهده کنید. می‌توانید شماره‌های سیگنال موجود در سیستم‌های لینوکس را در فایل /usr/include/asm-generic/signal.h بیابید، که نیازی نیست مستقیماً در کد برنامه خود وارد کنید.

تولید و ارسال سیگنال

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

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

مفهوم سیگنال معلق

در طول زمان از تولید تا انتقال سیگنال، سیگنال ها در حالت آماده به کار هستند. از فایل /proc/PID/status می‌توانید به تعداد سیگنال‌های معلق و تعداد سیگنال‌های در انتظار مجاز برای یک فرآیند دسترسی داشته باشید.

# For a process with PID: 2299
cat /proc/2299/status


# Output
...
SigQ: 2/31630
...

ماسک های سیگنال و مسدود کردن

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

مطلب مرتبط:   لینوکس 6.2 پشتیبانی از سیلیکون اپل را رسمی می کند

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

هنگامی که برنامه یک سیگنال را مسدود می کند، سیگنال های دیگر از همان نوع تولید شده در حالت انتظار خواهند بود تا زمانی که مسدود شوند. در برنامه، ارسال سیگنال های معلق نیز به محض حذف بلوک ارائه می شود.

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

انواع سیگنال لینوکس

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

برخی از سیگنال ها را نمی توان در لایه برنامه ضبط کرد، این سیگنال ها همیشه عملکرد پیش فرض را انجام می دهند (مانند سیگنال KILL).

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

مقادیر زیر بر اساس یک معماری نمونه MIPS است:

سیگنال

شماره

اقدام پیش فرض

آیا می توان آن را گرفت؟

SIGHUP

برنامه را خاتمه دهید

بله

SIGINT

برنامه را خاتمه دهید

بله

SIGQUIT

خاتمه برنامه (دامپ هسته)

بله

مطلب مرتبط:   نحوه غیرفعال کردن قفل صفحه در ویندوز 11

SIGILL

خاتمه برنامه (دامپ هسته)

بله

SIGTRAP

خاتمه برنامه (دامپ هسته)

بله

SIGABRT

خاتمه برنامه (دامپ هسته)

بله

SIGFPE

خاتمه برنامه (دامپ هسته)

بله

SIGKILL

برنامه را خاتمه دهید

خیر

SIGBUS

10

خاتمه برنامه (دامپ هسته)

بله

SIGSEGV

11

خاتمه برنامه (دامپ هسته)

بله

SIGSYS

12

خاتمه برنامه (دامپ هسته)

بله

SIGPIPE

13

برنامه را خاتمه دهید

بله

SIGALRM

14

برنامه را خاتمه دهید

بله

SIGTERM

15

برنامه را خاتمه دهید

بله

SIGUSR1

16

برنامه را خاتمه دهید

بله

SIGUSR2

17

برنامه را خاتمه دهید

بله

سیگچلد

18

نادیده گرفتن

بله

SIGTSTP

20

توقف کنید

بله

SIGURG

21

نادیده گرفتن

بله

SIGPOLL

22

برنامه را خاتمه دهید

بله

SIGSTOP

23

توقف کنید

خیر

SIGCONT

25

در صورت توقف ادامه دهید

بله

SIGTTIN

26

توقف کنید

بله

SIGTTOU

27

توقف کنید

بله

SIGVTALRM

28

برنامه را خاتمه دهید

بله

SIGPROF

29

برنامه را خاتمه دهید

بله

SIGXCPU

30

خاتمه برنامه (دامپ هسته)

بله

SIGXFSZ

31

خاتمه برنامه (دامپ هسته)

بله

چرخه حیات سیگنال ها در لینوکس

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

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

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