کتابخانه‌ی استاندارد · سیستم و ابزار

سیگنال os.signal

منتظر ماندن برای سیگنال‌های سیستم عامل: توقف تمیز با Ctrl+C یا SIGTERM، فهمیدن تغییر اندازه‌ی پایانه و تعیین این‌که کدام نخ سیگنال را بگیرد.

واردسازی سیستم عامل.سیگنال

نام آرگومان‌ها شناسه‌ی خود کد است و معادل فارسی ندارد؛ گونه‌ها، کلیدواژه‌ها و نام بسته‌ها با معادل فارسی نوشته می‌شوند.

سیگنال پیام کوتاهی است که سیستم عامل به یک فرآیند می‌فرستد: Ctrl+C سیگنال SIGINT می‌فرستد، kill و محیط‌های کانتینر SIGTERM می‌فرستند، و پایانه وقتی اندازه‌ی پنجره‌اش عوض شود SIGWINCH می‌فرستد. بیشتر سیگنال‌ها به طور پیش‌فرض برنامه را همان لحظه می‌بندند، وسط هر چیزی که داشت می‌نوشت. بسته‌ی سیگنال به برنامه اجازه می‌دهد سیگنال‌هایی را که برایش مهم‌اند مثل رویدادهای معمولی بگیرد و در جای امنی از کد خودش به آن‌ها پاسخ دهد.

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

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

سیگنال‌ها در لینوکس، اندروید، مک و BSD هستند. در ویندوز همه‌ی تابع‌ها جایگزین‌های بی‌خطرند: تغییر اندازه پشتیبانی می شود نادرست است، مجموعه‌ها پوچ‌اند و انتظارها نتیجه نامعتبر برمی‌گردانند، پس یک برنامه همه جا کامپایل می‌شود و می‌تواند به پرسیدن دوره‌ای برگردد.

توقف تمیز با Ctrl+C یا SIGTERM

SIGINT و SIGTERM را در یک مجموعه بگذارید، مسدودش کنید، کار را انجام دهید و سپس منتظر بمانید. انتظار سیگنال شماره‌ی سیگنال رسیده را برمی‌گرداند تا برنامه وضعیتش را ذخیره کند و به خواست خودش بیرون برود. نمونه با فرستادن به خود به خودش SIGTERM می‌فرستد تا خودش تمام شود؛ در برنامه‌ی واقعی سیگنال از صفحه‌کلید یا از kill می‌آید.

os-signal-guide-shutdown.salam
// زبان: فارسی
واردسازی حافظه
واردسازی سیستم عامل.سیگنال

تابع ریشه:
    توقف := سیگنال.مجموعه جدید()
    دیرکن حافظه.آزادسازی(توقف)
    _ := سیگنال.افزودن سیگنال(توقف، سیگنال.سیگنال وقفه)
    _ := سیگنال.افزودن سیگنال(توقف، سیگنال.سیگنال خاتمه)
    اگر وارونه سیگنال.مسدود کردن(توقف):
        سرچاپ "سیگنال‌های توقف مسدود نشدند"
        برگشت 1
    پایان
    سرچاپ "در حال کار؛ برای توقف Ctrl+C بزنید یا kill را اجرا کنید"
    _ := سیگنال.فرستادن به خود(سیگنال.سیگنال خاتمه)
    سیگ := سیگنال.انتظار سیگنال(توقف)
    اگر سیگ برابر سیگنال.سیگنال وقفه:
        سرچاپ "Ctrl+C: ذخیره و خروج"
    وگرنه سیگ برابر سیگنال.سیگنال خاتمه:
        سرچاپ "SIGTERM: ذخیره و خروج"
    وگرنه:
        سرچاپ "انتظار ناموفق بود با وضعیت"، سیگ
        برگشت 1
    پایان
    برگشت 0
پایان
خروجیدر حال کار؛ برای توقف Ctrl+C بزنید یا kill را اجرا کنید SIGTERM: ذخیره و خروج

کارگرها کار می‌کنند، یک نخ منتظر است

اول مسدود کنید، بعد نخ‌ها را بسازید: ماسک را به ارث می‌برند و سیگنال هرگز وسط کار یک کارگر نمی‌رسد. ریشه منتظر سیگنال می‌ماند، سپس با یک پرچم اتمی (بسته‌ی اتمی) به کارگرها می‌گوید بایستند و منتظر پایانشان می‌ماند.

os-signal-guide-threads.salam
// زبان: فارسی
واردسازی حافظه
واردسازی همگام سازی
واردسازی اتمی
واردسازی سیستم عامل.سیگنال

ناپایا توقف‌شدن := اتمی.پرچم جدید(نادرست)

تابع کارگر(_ورودی: تهی*):
    تا وارونه اتمی.گرفتن(توقف‌شدن):
        همگام سازی.خواب میلی ثانیه(10)
    پایان
    سرچاپ "کارگر درخواست توقف را دید"
پایان

تابع ریشه:
    توقف := سیگنال.مجموعه جدید()
    دیرکن حافظه.آزادسازی(توقف)
    _ := سیگنال.افزودن سیگنال(توقف، سیگنال.سیگنال خاتمه)
    _ := سیگنال.مسدود کردن(توقف)
    نخ := نخ‌ساز(کارگر، پوچ)
    _ := سیگنال.فرستادن به خود(سیگنال.سیگنال خاتمه)
    سرچاپ "ریشه سیگنال گرفت"، سیگنال.انتظار سیگنال(توقف)
    اتمی.تنظیم(توقف‌شدن، درست)
    نخ‌پیوند(نخ)
    اتمی.نابودسازی پرچم(توقف‌شدن)
    سرچاپ "خروج تمیز"
پایان
خروجیریشه سیگنال گرفت 15 کارگر درخواست توقف را دید خروج تمیز

فهمیدن تغییر اندازه‌ی پایانه

SIGWINCH به طور پیش‌فرض نادیده گرفته می‌شود و در مک سیگنال نادیده حتی اگر مسدود باشد دور ریخته می‌شود. برای همین نصب گرداننده تغییر اندازه گرداننده‌ای می‌گذارد که کاری نمی‌کند و سیگنال را مسدود می‌کند تا تغییر اندازه‌ها در صف بمانند. انتظار با مهلت با یک سقف زمانی منتظر می‌ماند و می‌گذارد حلقه میان دو تغییر اندازه کارهای دیگری هم بکند. مقداری را که برگرداند در پایان به بازگردانی بدهید. سیگنال فقط می‌گوید اندازه شاید عوض شده و چند تغییر اندازه ممکن است یکی برسند، پس پس از هر بیدار شدن اندازه‌ی تازه را با پایانه.اندازه() بخوانید.

os-signal-guide-resize.salam
// زبان: فارسی
واردسازی حافظه
واردسازی سیستم عامل.سیگنال

تابع ریشه:
    اگر وارونه سیگنال.تغییر اندازه پشتیبانی می شود():
        سرچاپ "این‌جا SIGWINCH نیست: به جایش اندازه پایانه را بپرسید"
        برگشت 0
    پایان
    قبلی := سیگنال.نصب گرداننده تغییر اندازه()
    اگر قبلی برابر پوچ:
        سرچاپ "گرداننده نصب نشد"
        برگشت 1
    پایان
    مجموعه := سیگنال.مجموعه تغییر اندازه جدید()
    خروجی := حافظه.تخصیص صفرشده(8 برگردان طبیعی۶۴)
    سرچاپ "هنوز چیزی نیامده:"، سیگنال.انتظار با مهلت(مجموعه، خروجی، 100) برابر سیگنال.نتیجه اتمام مهلت
    _ := سیگنال.بیدار کردن تغییر اندازه()
    سرچاپ "پس از تغییر اندازه:"، سیگنال.انتظار با مهلت(مجموعه، خروجی، 1000) برابر سیگنال.نتیجه رسیدن
    سرچاپ "شماره سیگنال:"، (خروجی برگردان صحیح۳۲*)[0]
    حافظه.آزادسازی(خروجی)
    حافظه.آزادسازی(مجموعه)
    سرچاپ "بازگردانده شد:"، سیگنال.بازگردانی(سیگنال.سیگنال تغییر اندازه، قبلی)
    حافظه.آزادسازی(قبلی)
    برگشت 0
پایان
خروجیهنوز چیزی نیامده: true پس از تغییر اندازه: true شماره سیگنال: 28 بازگردانده شد: true
نیازاستفاده
منتظر Ctrl+C یا SIGTERM ماندنمجموعه جدید، افزودن سیگنال، مسدود کردن، انتظار سیگنال
انتظار با سقف زمانینصب، سپس انتظار با مهلت
پاسخ به تغییر اندازه‌ی پایانهنصب گرداننده تغییر اندازه، مجموعه تغییر اندازه جدید، انتظار تغییر اندازه یا انتظار با مهلت
بیدار کردن نخ منتظرفرستادن به خود، یا برای SIGWINCH بیدار کردن تغییر اندازه
ذخیره و برگرداندن ماسک نخماسک فعلی، تنظیم ماسک
فرستادن سیگنال به برنامه‌ی دیگرفرزند.فرستادن سیگنال در بسته‌ی فرآیند
برنامه‌ی تمام‌صفحه‌ی پایانهرابط‌پایانه که همه‌ی این‌ها را برایتان انجام می‌دهد

آنچه باید در نظر داشت:

  • SIGKILL و SIGSTOP هرگز مسدود نمی‌شوند، نمی‌شود منتظرشان ماند و گرداننده نمی‌گیرند.
  • در هر فرآیند هر بار فقط یک نخ می‌تواند منتظر باشد؛ منتظر دوم به جای نیمی از سیگنال‌ها نتیجه مشغول می‌گیرد.
  • سیگنال‌های هم‌نوع روی هم جمع نمی‌شوند: دو SIGWINCH که وقتی یکی در صف است فرستاده شوند یکی می‌رسند.
  • گرداننده‌ای که به نصب می‌دهید روی هر نخی که سیگنال را بگیرد اجرا می‌شود و فقط کارهای امن در برابر سیگنال مجاز است. مسدود کردن و منتظر ماندن، مثل بالا، اصلا نیازی به گرداننده ندارد.

پایاها و متغیرها

سیگنال تغییر اندازه WinchSignal

پایا سیگنال تغییر اندازه: صحیح۳۲ = 28
شماره‌ی SIGWINCH (۲۸)، سیگنالی که پایانه هنگام تغییر اندازه‌ی پنجره‌اش می‌فرستد.
os-signal-Winch.salam
// زبان: فارسی
واردسازی حافظه
واردسازی سیستم عامل.سیگنال

تابع ریشه:
    اگر وارونه سیگنال.تغییر اندازه پشتیبانی می شود():
        سرچاپ "ویندوز: اندازه پایانه را بپرسید"
        برگشت
    پایان
    قبلی := سیگنال.نصب گرداننده تغییر اندازه()
    _ := سیگنال.مسدود کردن تغییر اندازه()
    مجموعه := سیگنال.مجموعه تغییر اندازه جدید()
    _ := سیگنال.بیدار کردن تغییر اندازه()
    سرچاپ "بیدار شد با"، سیگنال.انتظار تغییر اندازه(مجموعه)، "که برابر است با"، سیگنال.سیگنال تغییر اندازه
    حافظه.آزادسازی(مجموعه)
    _ := سیگنال.بازگردانی(سیگنال.سیگنال تغییر اندازه، قبلی)
    حافظه.آزادسازی(قبلی)
پایان
خروجیبیدار شد با 28 که برابر است با 28

وضعیت‌های انتظار Wait…

آنچه انتظار و انتظار با مهلت برمی‌گردانند، و مقدارهای منفی‌ای که انتظار سیگنال و انتظار تغییر اندازه وقتی سیگنالی نرسیده برمی‌گردانند. نتیجه رسیدن یک است، نتیجه اتمام مهلت صفر است و شکست‌ها منفی‌اند: نتیجه نامعتبر (آرگومان نادرست، نبودن نصب پیش از انتظار با مهلت، یا ویندوز)، نتیجه شکست (فراخوانی سیستمی شکست خورد) و نتیجه مشغول (نخ دیگری از قبل منتظر است).
نامانگلیسیمقدار
نتیجه رسیدنWaitArrived1
نتیجه اتمام مهلتWaitTimedOut0
نتیجه نامعتبرWaitInvalid-1
نتیجه شکستWaitFailed-2
نتیجه مشغولWaitBusy-3
os-signal-Wait.salam
// زبان: فارسی
واردسازی حافظه
واردسازی سیستم عامل.سیگنال

تابع نادیده(_سیگ: صحیح):
    _ := _سیگ
پایان

تابع ریشه:
    سرچاپ "SIGINT"، سیگنال.سیگنال وقفه، "SIGTERM"، سیگنال.سیگنال خاتمه، "SIGKILL"، سیگنال.سیگنال کشتن
    سرچاپ "بقیه در هر سیستم فرق دارند:"، سیگنال.سیگنال کاربر۱ بزرگتر 0، سیگنال.سیگنال کاربر۲ بزرگتر 0، سیگنال.سیگنال فرزند بزرگتر 0
    سرچاپ "شماره‌های ثابت:"، سیگنال.سیگنال قطع، سیگنال.سیگنال خروج، سیگنال.سیگنال لوله، سیگنال.سیگنال زنگ، سیگنال.سیگنال اندازه پنجره
    سرچاپ "کنترل کار:"، سیگنال.سیگنال از سرگیری بزرگتر 0، سیگنال.سیگنال ایست بزرگتر 0، سیگنال.سیگنال توقف پایانه بزرگتر 0

    قبلی := سیگنال.نصب(سیگنال.سیگنال کاربر۱، &نادیده)
    مجموعه := سیگنال.مجموعه جدید()
    _ := سیگنال.افزودن سیگنال(مجموعه، سیگنال.سیگنال کاربر۱)
    خروجی := حافظه.تخصیص صفرشده(8 برگردان طبیعی۶۴)

    سرچاپ "مهلت تمام شد:"، سیگنال.انتظار با مهلت(مجموعه، خروجی، 50) برابر سیگنال.نتیجه اتمام مهلت
    _ := سیگنال.فرستادن به خود(سیگنال.سیگنال کاربر۱)
    سرچاپ "رسید:"، سیگنال.انتظار(مجموعه، خروجی) برابر سیگنال.نتیجه رسیدن
    _ := سیگنال.فرستادن به خود(سیگنال.سیگنال کاربر۱)
    سرچاپ "شماره:"، سیگنال.انتظار سیگنال(مجموعه) برابر سیگنال.سیگنال کاربر۱
    سرچاپ "آرگومان نادرست:"، سیگنال.انتظار(پوچ، خروجی) برابر سیگنال.نتیجه نامعتبر
    سرچاپ "وضعیت‌ها:"، سیگنال.نتیجه شکست کوچکتر 0، سیگنال.نتیجه مشغول کوچکتر 0

    حافظه.آزادسازی(خروجی)
    حافظه.آزادسازی(مجموعه)
    سرچاپ "بازگردانده شد:"، سیگنال.بازگردانی(سیگنال.سیگنال کاربر۱، قبلی)
    حافظه.آزادسازی(قبلی)
پایان
خروجیSIGINT 2 SIGTERM 15 SIGKILL 9 بقیه در هر سیستم فرق دارند: true true true شماره‌های ثابت: 1 3 13 14 28 کنترل کار: true true true مهلت تمام شد: true رسید: true شماره: true آرگومان نادرست: true وضعیت‌ها: true true بازگردانده شد: true

سیگنال قطع SigHup

پایا سیگنال قطع: صحیح۳۲ = 1
SIGHUP (۱): پایانه بسته شد، یا از یک سرویس خواسته می‌شود تنظیماتش را دوباره بخواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال وقفه SigInt

پایا سیگنال وقفه: صحیح۳۲ = 2
SIGINT (۲): کاربر Ctrl+C را زد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال خروج SigQuit

پایا سیگنال خروج: صحیح۳۲ = 3
SIGQUIT (۳): کاربر Ctrl+\ را زد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال کشتن SigKill

پایا سیگنال کشتن: صحیح۳۲ = 9
SIGKILL (۹): فرآیند را همان لحظه می‌بندد. نه مسدود می‌شود، نه می‌شود منتظرش ماند و نه گرداننده می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال لوله SigPipe

پایا سیگنال لوله: صحیح۳۲ = 13
SIGPIPE (۱۳): نوشتن در لوله یا سوکتی که خواننده‌اش رفته است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال زنگ SigAlrm

پایا سیگنال زنگ: صحیح۳۲ = 14
SIGALRM (۱۴): زمان‌سنجی که با alarm تنظیم شده بود تمام شد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال خاتمه SigTerm

پایا سیگنال خاتمه: صحیح۳۲ = 15
SIGTERM (۱۵): درخواست مؤدبانه‌ی توقف که kill، مدیرهای سرویس و محیط‌های کانتینر می‌فرستند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال اندازه پنجره SigWinch

پایا سیگنال اندازه پنجره: صحیح۳۲ = 28
SIGWINCH (۲۸): اندازه‌ی پنجره‌ی پایانه عوض شد. همان مقدار سیگنال تغییر اندازه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

سیگنال کاربر۱ SigUsr1

پایا سیگنال کاربر۱: صحیح۳۲ = 10
SIGUSR1: آزاد برای کار خود برنامه. در لینوکس و اندروید ۱۰، در مک و BSD ۳۰.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال کاربر۲ SigUsr2

پایا سیگنال کاربر۲: صحیح۳۲ = 12
SIGUSR2: آزاد برای کار خود برنامه. در لینوکس و اندروید ۱۲، در مک و BSD ۳۱.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال فرزند SigChld

پایا سیگنال فرزند: صحیح۳۲ = 17
SIGCHLD: یک فرآیند فرزند متوقف شد یا پایان یافت. در لینوکس ۱۷، در مک و BSD ۲۰.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال از سرگیری SigCont

پایا سیگنال از سرگیری: صحیح۳۲ = 18
SIGCONT: فرآیند متوقف‌شده ادامه می‌دهد. در لینوکس ۱۸، در مک و BSD ۱۹.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال ایست SigStop

پایا سیگنال ایست: صحیح۳۲ = 19
SIGSTOP: فرآیند را متوقف می‌کند. مثل SIGKILL نه مسدود می‌شود و نه گرداننده می‌گیرد. در لینوکس ۱۹، در مک و BSD ۱۷.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

سیگنال توقف پایانه SigTstp

پایا سیگنال توقف پایانه: صحیح۳۲ = 20
SIGTSTP: کاربر Ctrl+Z را زد. در لینوکس ۲۰، در مک و BSD ۱۸.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

اندازه مجموعه سیگنال SignalSetSize

پایا اندازه مجموعه سیگنال: صحیح۳۲ = 128
اندازه‌ی یک مجموعه‌ی سیگنال به بایت در این سیستم: لینوکس ۱۲۸، اندروید ۶۴ بیتی ۸، مک ۴، FreeBSD و NetBSD ۱۶ و ویندوز ۰.
os-signal-Sets.salam
// زبان: فارسی
واردسازی حافظه
واردسازی سیستم عامل.سیگنال

تابع ریشه:
    سرچاپ "اندازه مجموعه به بایت:"، سیگنال.اندازه مجموعه سیگنال بزرگتر 0
    مجموعه := سیگنال.مجموعه جدید()
    _ := سیگنال.افزودن سیگنال(مجموعه، سیگنال.سیگنال کاربر۱)
    _ := سیگنال.افزودن سیگنال(مجموعه، سیگنال.سیگنال قطع)
    سرچاپ "SIGUSR1 دارد:"، سیگنال.عضو مجموعه است(مجموعه، سیگنال.سیگنال کاربر۱)
    _ := سیگنال.حذف سیگنال(مجموعه، سیگنال.سیگنال قطع)
    سرچاپ "SIGHUP دارد:"، سیگنال.عضو مجموعه است(مجموعه، سیگنال.سیگنال قطع)

    ذخیره := سیگنال.ماسک فعلی()
    _ := سیگنال.مسدود کردن(مجموعه)
    اکنون := سیگنال.ماسک فعلی()
    سرچاپ "SIGUSR1 مسدود است:"، سیگنال.عضو مجموعه است(اکنون، سیگنال.سیگنال کاربر۱)
    _ := سیگنال.رفع انسداد(مجموعه)
    _ := سیگنال.تنظیم ماسک(ذخیره)

    همه := سیگنال.مجموعه جدید()
    سیگنال.پر کردن مجموعه(همه)
    سرچاپ "مجموعه کامل SIGTERM دارد:"، سیگنال.عضو مجموعه است(همه، سیگنال.سیگنال خاتمه)

    حافظه.آزادسازی(همه)
    حافظه.آزادسازی(اکنون)
    حافظه.آزادسازی(ذخیره)
    حافظه.آزادسازی(مجموعه)
پایان
خروجیاندازه مجموعه به بایت: true SIGUSR1 دارد: true SIGHUP دارد: false SIGUSR1 مسدود است: true مجموعه کامل SIGTERM دارد: true

تابع‌ها

تغییر اندازه پشتیبانی می شود WinchSupported

تابع تغییر اندازه پشتیبانی می شود(): منطقی
وقتی درست است که فرآیند بتواند SIGWINCH بگیرد، یعنی همه‌ی سیستم‌ها جز ویندوز. در ویندوز به جای آن اندازه را با پایانه.اندازه() بپرسید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

مجموعه تغییر اندازه جدید NewWinchSet

تابع مجموعه تغییر اندازه جدید(): تهی*
یک مجموعه‌ی سیگنال تازه برمی‌گرداند که فقط SIGWINCH در آن است. با حافظه.آزادسازی آزادش کنید. در ویندوز یا وقتی حافظه تمام شود پوچ است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

نصب گرداننده تغییر اندازه InstallWinchHandler

تابع نصب گرداننده تغییر اندازه(): تهی*
برای SIGWINCH گرداننده‌ای می‌گذارد که کاری نمی‌کند و سیگنال را روی نخ فراخواننده مسدود می‌کند تا تغییر اندازه‌ها برای انتظار در صف بمانند. وضعیت قبلی را برمی‌گرداند: در پایان آن را به بازگردانی بدهید و بعد با حافظه.آزادسازی آزادش کنید. در ویندوز یا هنگام شکست پوچ است و چیزی تغییر نکرده است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

نصب Install

تابع نصب(sig: صحیح، handler: تهی*): تهی*
گرداننده را برای sig نصب می‌کند (پوچ یعنی کار پیش‌فرض) و sig را روی نخ فراخواننده مسدود می‌کند. یک برداشت از گرداننده و ماسک قبلی برمی‌گرداند: آن را به بازگردانی بدهید و سپس با حافظه.آزادسازی آزادش کنید. نصب دوباره‌ی همان گرداننده فقط یک صاحب به شمار می‌افزاید؛ گرداننده‌ی دیگری برای سیگنالی که صاحب دارد با پوچ رد می‌شود. گرداننده روی هر نخی که سیگنال را بگیرد اجرا می‌شود و فقط کارهای امن در برابر سیگنال مجاز است: بدون تخصیص حافظه، بدون قفل و بدون چاپ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

بازگردانی Restore

تابع بازگردانی(sig: صحیح، prev: تهی*): منطقی
وضعیتی را که برداشت نصب ثبت کرده، روی همان نخ نصب‌کننده بازمی‌گرداند. تا وقتی صاحبان دیگری مانده‌اند فقط شمار صاحبان کم می‌شود و سیگنال برایشان مسدود می‌ماند؛ آخرین صاحب گرداننده و ماسک اصلی را برمی‌گرداند. بازگردانی دوباره پس از آن کاری نمی‌کند و درست برمی‌گرداند. برداشت را آزاد نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

مسدود کردن تغییر اندازه BlockWinch

تابع مسدود کردن تغییر اندازه(): منطقی
SIGWINCH را روی نخ فراخواننده مسدود می‌کند تا تغییر اندازه‌ها در صف بمانند. نخ‌هایی که بعد ساخته شوند ماسک را به ارث می‌برند و همین می‌گذارد یک نخ ناظر صاحب انتظار باشد. در ویندوز یا هنگام شکست نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

انتظار Wait

تابع انتظار(set: تهی*، out: تهی*): صحیح
صبر می‌کند تا سیگنالی از مجموعه در صف باشد، شماره‌اش را به صورت صحیح۳۲ در out[0] می‌نویسد و نتیجه رسیدن را برمی‌گرداند. اول سیگنال‌ها را مسدود کنید تا به جای تحویل در صف بمانند. برای آرگومان پوچ و در ویندوز نتیجه نامعتبر، وقتی نخ دیگری منتظر است نتیجه مشغول و وقتی خود انتظار شکست بخورد نتیجه شکست برمی‌گرداند. هر بار فقط یک نخ می‌تواند منتظر باشد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

انتظار با مهلت WaitTimeout

تابع انتظار با مهلت(set: تهی*، out: تهی*، millis: صحیح): صحیح
مثل انتظار است، اما پس از millis میلی‌ثانیه دست می‌کشد و نتیجه اتمام مهلت برمی‌گرداند؛ صفر یک بار بدون انتظار نگاه می‌کند و مقدار منفی نتیجه نامعتبر است. سیگنال باید پیش‌تر با نصب نصب شده باشد. در مک مجموعه باید دقیقا یک سیگنال داشته باشد؛ لینوکس هر مجموعه‌ای را می‌پذیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

انتظار تغییر اندازه WaitWinch

تابع انتظار تغییر اندازه(set: تهی*): صحیح
روی مجموعه‌ای از مجموعه تغییر اندازه جدید منتظر SIGWINCH می‌ماند و با رسیدنش ۲۸ برمی‌گرداند، یا یک وضعیت منفی انتظار. فقط در ویندوز که SIGWINCH ندارد صفر برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

بیدار کردن تغییر اندازه WakeWinch

تابع بیدار کردن تغییر اندازه(): منطقی
SIGWINCH را به همین فرآیند می‌فرستد و نخی را که در انتظار تغییر اندازه است بیدار می‌کند؛ برای متوقف کردن نخ ناظر به کار می‌آید. در ویندوز یا اگر فرستادن شکست بخورد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Winch.salam

مجموعه جدید NewSet

تابع مجموعه جدید(): تهی*
یک مجموعه‌ی سیگنال تازه و خالی برمی‌گرداند. با حافظه.آزادسازی آزادش کنید. در ویندوز یا وقتی حافظه تمام شود پوچ است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

پر کردن مجموعه FillSet

تابع پر کردن مجموعه(set: تهی*)
همه‌ی سیگنال‌هایی را که سیستم می‌شناسد به مجموعه اضافه می‌کند. برای مجموعه‌ی پوچ و در ویندوز کاری نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

افزودن سیگنال AddSignal

تابع افزودن سیگنال(set: تهی*، sig: صحیح): منطقی
sig را به مجموعه اضافه می‌کند. اگر مجموعه پوچ، شماره مثبت نباشد یا سیستم آن را نپذیرد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

حذف سیگنال DelSignal

تابع حذف سیگنال(set: تهی*، sig: صحیح): منطقی
sig را از مجموعه برمی‌دارد. اگر مجموعه پوچ، شماره مثبت نباشد یا سیستم آن را نپذیرد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

عضو مجموعه است IsSignal

تابع عضو مجموعه است(set: تهی*، sig: صحیح): منطقی
وقتی sig در مجموعه باشد درست است. برای مجموعه‌ی پوچ، شماره‌ی نامثبت و در ویندوز نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

مسدود کردن Block

تابع مسدود کردن(set: تهی*): منطقی
سیگنال‌های مجموعه را به ماسک نخ فراخواننده اضافه می‌کند تا به جای قطع کردن نخ در صف بمانند. این کار را پیش از ساختن نخ‌های دیگر بکنید تا آن را به ارث ببرند. برای مجموعه‌ی پوچ، در ویندوز یا هنگام شکست نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

رفع انسداد Unblock

تابع رفع انسداد(set: تهی*): منطقی
سیگنال‌های مجموعه را از ماسک نخ فراخواننده برمی‌دارد. سیگنالی که در صف مانده همان لحظه تحویل می‌شود. برای مجموعه‌ی پوچ، در ویندوز یا هنگام شکست نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

تنظیم ماسک SetMask

تابع تنظیم ماسک(set: تهی*): منطقی
کل ماسک نخ فراخواننده را با مجموعه جایگزین می‌کند، مثلا برای برگرداندن ماسکی که با ماسک فعلی ذخیره شده. برای مجموعه‌ی پوچ، در ویندوز یا هنگام شکست نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

ماسک فعلی CurrentMask

تابع ماسک فعلی(): تهی*
یک مجموعه‌ی تازه با ماسک فعلی نخ فراخواننده برمی‌گرداند. با حافظه.آزادسازی آزادش کنید. در ویندوز یا هنگام شکست پوچ است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Sets.salam

انتظار سیگنال WaitSignal

تابع انتظار سیگنال(set: تهی*): صحیح
صبر می‌کند تا سیگنالی از مجموعه در صف باشد و شماره‌اش را برمی‌گرداند، یا وقتی انتظار انجام نشود یک وضعیت منفی انتظار. اول سیگنال‌ها را مسدود کنید. ساده‌ترین راه برای منتظر ماندن Ctrl+C یا SIGTERM همین است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam

فرستادن به خود Raise

تابع فرستادن به خود(sig: صحیح): منطقی
sig را به همین فرآیند می‌فرستد. اگر سیگنال مسدود باشد فقط در صف منتظر یک انتظار می‌ماند. برای شماره‌ی نامثبت، در ویندوز یا اگر فرستادن شکست بخورد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: os-signal-Wait.salam