علامت

ساخت وبلاگ

این بسته در آخرین نسخه ماژول آن نیست.

جزئیات

  • پرونده معتبر go. mod سیستم ماژول GO در GO 1. 11 معرفی شد و راه حل رسمی مدیریت وابستگی برای GO است.
  • مجوزهای قابل توزیع مجدد مجوز قابل توزیع محدودیت حداقل در نحوه استفاده ، اصلاح و توزیع مجدد نرم افزار را قرار دهید.
  • ماژول های نسخه برچسب خورده با نسخه های برچسب زده شده ، واردکنندگان را به ساختارهای قابل پیش بینی تر می دهد.
  • نسخه پایدار وقتی یک پروژه به نسخه اصلی V1 می رسد ، پایدار تلقی می شود.
  • بیشتر بدانید

مخزن

لینک

  • گزارش آسیب پذیری

مستندات ¶

بررسی اجمالی ¶

  • انواع سیگنال ها
  • رفتار پیش فرض سیگنال ها در برنامه های GO
  • تغییر رفتار سیگنال ها در برنامه های GO
  • سیگپی
  • به برنامه هایی بروید که از CGO یا swig استفاده می کنند
  • برنامه های غیر GO که با کد GO تماس می گیرند
  • پنجره ها
  • برنامه 9

سیگنال بسته دسترسی به سیگنال های ورودی را پیاده سازی می کند.

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

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

سیگنال های Sigkill و Sigstop ممکن است توسط یک برنامه گرفتار نشوند و بنابراین نمی توانند تحت تأثیر این بسته قرار گیرند.

سیگنال های همزمان سیگنال هایی هستند که توسط خطاها در اجرای برنامه ایجاد می شوند: Sigbus ، Sigfpe و SIGSEGV. اینها فقط در هنگام اجرای برنامه همزمان در نظر گرفته می شوند ، نه هنگام ارسال با استفاده از OS. Process. Kill یا برنامه Kill یا مکانیسم مشابه. به طور کلی ، به جز آنچه در زیر مورد بحث قرار گرفته است ، برنامه های GO یک سیگنال همزمان را به یک وحشت زمان اجرا تبدیل می کنند.

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

از میان سیگنال های ناهمزمان ، سیگنال آهگی هنگام از دست دادن یک برنامه ترمینال کنترل خود ارسال می شود. سیگنال SIGINT هنگامی ارسال می شود که کاربر در ترمینال کنترل کننده شخصیت قطع را فشار دهد ، که به طور پیش فرض ^C (Control-C) است. سیگنال Sigquit ارسال می شود که کاربر در ترمینال کنترل کننده شخصیت Quit را فشار دهد ، که به طور پیش فرض ^ (کنترل-بازک) است. به طور کلی می توانید با فشار دادن ^c ، یک برنامه به سادگی از آن خارج شوید ، و می توانید با فشار دادن ^ ، با فشار دادن پشته از آن خارج شوید.

رفتار پیش فرض سیگنال ها در برنامه های GO

به طور پیش فرض ، یک سیگنال همزمان به یک وحشت زمان اجرا تبدیل می شود. یک سیگنال آه ، سیگینت یا سیگترم باعث خروج برنامه می شود. سیگنال Sigquit ، Sigill ، Sigtrap ، Sigabrt ، Sigstkflt ، Sigemt یا Sigsys باعث می شود که این برنامه با یک زباله پشته از آن خارج شود. سیگنال SIGTSTP ، SIGTTIN یا SIGTTOU رفتار پیش فرض سیستم را بدست می آورد (این سیگنال ها توسط پوسته برای کنترل شغل استفاده می شوند). سیگنال SIGPROF به طور مستقیم توسط Go Runtime برای اجرای Runtime. cpuprofile اداره می شود. سیگنال های دیگر گرفتار می شوند اما هیچ اقدامی صورت نمی گیرد.

اگر برنامه GO با آهسته یا نادیده گرفته شده SIGHUP یا SIGINT شروع شود (کنترل کننده سیگنال روی SIG_IGN) ، آنها نادیده گرفته می شوند.

اگر برنامه GO با ماسک سیگنال غیر خالی آغاز شود ، به طور کلی مورد تقدیر قرار می گیرد. با این حال ، برخی از سیگنال ها به صراحت از بین رفته اند: سیگنال های همزمان ، سیگیل ، Sigtrap ، Sigstkflt ، Sigchld ، Sigprof و ، در لینوکس ، سیگنال های 32 (Sigcancel) و 33 (Sigsetxid) (Sigcancel و Sigsetxid توسط Glibc در داخل داخلی استفاده می شوند). زیر فرآیندهای شروع شده توسط OS. exec یا توسط بسته OS/EXEC ، ماسک سیگنال اصلاح شده را به ارث می برند.

تغییر رفتار سیگنال ها در برنامه های GO

توابع موجود در این بسته به یک برنامه اجازه می دهد تا نحوه کنترل برنامه های GO را به سیگنال ها تغییر دهد.

NOTIFY رفتار پیش فرض را برای مجموعه مشخصی از سیگنال های ناهمزمان غیرفعال می کند و در عوض آنها را از طریق یک یا چند کانال ثبت شده ارائه می دهد. به طور خاص ، این مربوط به سیگنال های آه ، سیگینت ، سیگکویت ، سیگابرت و سیگترم است. همچنین در مورد سیگنال های کنترل شغل SIGTSTP ، SIGTTIN و SIGTTOU اعمال می شود ، که در این حالت رفتار پیش فرض سیستم رخ نمی دهد. همچنین در مورد برخی از سیگنال ها اعمال می شود که در غیر این صورت هیچ عملی ایجاد نمی کنند: Sigusr1 ، Sigusr2 ، Sigpipe ، Sigalrm ، Sigchld ، Sigcont ، Sigurg ، Sigxcpu ، Sigxfsz ، Sigvtalrm ، Sigwinch ، Sigio ، Sigpwr ، Sigpwr ، Sigsr ، Sigsys ، Sigsys ، Sigsys ، Sigsys ، Sigsys ، sigsys ، sigsys ، sigsys ، sigsys ، sigsys ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr ، sigpwr. Sigthaw ، Siglost ، Sigxres ، SIGJVM1 ، SIGJVM2 و هر سیگنال زمان واقعی مورد استفاده در سیستم. توجه داشته باشید که همه این سیگنال ها در همه سیستم ها در دسترس نیستند.

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

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

Sigpipe

هنگامی که یک برنامه GO به یک لوله شکسته می نویسد ، هسته سیگنال سیگپیپ را بالا می برد.

اگر این برنامه برای دریافت سیگنال های SIGPIPE به آن اطلاع داده نشده باشد ، این رفتار به شماره توصیف کننده پرونده بستگی دارد. نوشتن به یک لوله شکسته در توصیف کننده های پرونده 1 یا 2 (خروجی استاندارد یا خطای استاندارد) باعث می شود که برنامه با سیگنال Sigpipe از آن خارج شود. نوشتن به یک لوله شکسته در برخی از توصیف کننده پرونده های دیگر هیچ اقدامی در مورد سیگنال Sigpipe انجام نمی دهد و نوشتن با یک خطای EPIPE شکست می خورد.

اگر این برنامه برای دریافت سیگنال های SIGPIPE به Notify فراخوانده شده باشد ، شماره توصیف کننده پرونده اهمیتی ندارد. سیگنال SIGPIPE به کانال Notify تحویل داده می شود و نوشتن با یک خطای EPIPE شکست می خورد.

این بدان معنی است که ، به طور پیش فرض ، برنامه های خط فرمان مانند برنامه های معمولی خط فرمان UNIX رفتار می کنند ، در حالی که سایر برنامه ها هنگام نوشتن به یک اتصال شبکه بسته با Sigpipe خراب نمی شوند.

برنامه هایی را که از CGO یا Swig استفاده می کنند ، بروید

در یک برنامه GO که شامل کد غیر GO است ، به طور معمول کد C/C ++ که با استفاده از CGO یا SWIG قابل دسترسی است ، کد راه اندازی GO به طور معمول ابتدا اجرا می شود. قبل از اجرای کد راه اندازی غیر GO ، دست اندرکاران سیگنال را همانطور که انتظار می رود زمان اجرا باشد ، پیکربندی می کند. اگر کد راه اندازی غیر GO مایل به نصب گیرنده های سیگنال خود باشد ، باید اقدامات خاصی را برای ادامه کار انجام دهد. این بخش آن مراحل را مستند می کند و تأثیر کلی در تنظیمات کنترل کننده سیگنال توسط کد غیر GO می تواند در برنامه های GO داشته باشد. در موارد نادر ، کد غیر GO ممکن است قبل از کد GO اجرا شود ، در این صورت بخش بعدی نیز اعمال می شود.

اگر کد غیر GO که توسط برنامه GO خوانده می شود ، هیچ گونه گیرنده یا ماسک سیگنال را تغییر نمی دهد ، رفتار همان است که برای یک برنامه GO خالص است.

اگر کد غیر GO هر یک از گیرنده های سیگنال را نصب کند ، باید از پرچم SA_ONSTACK با SIGACTION استفاده کند. عدم انجام این کار به احتمال زیاد باعث خراب شدن برنامه در صورت دریافت سیگنال می شود. برنامه های GO به طور معمول با یک پشته محدود اجرا می شوند و بنابراین یک پشته سیگنال جایگزین را تنظیم می کنند.

اگر کد غیر Go یک کنترل کننده سیگنال را برای هر یک از سیگنال های همزمان (Sigbus ، Sigfpe ، SIGSEGV) نصب کند ، پس باید کنترل کننده سیگنال GO موجود را ضبط کند. اگر این سیگنال ها هنگام اجرای کد GO رخ دهند ، باید از کنترل کننده سیگنال Go استفاده کنند (آیا سیگنال هنگام اجرای کد GO رخ می دهد با نگاه کردن به رایانه ای که به کنترل کننده سیگنال منتقل می شود می تواند تعیین شود). در غیر این صورت برخی از وحشت در زمان اجرا همانطور که انتظار می رود رخ نمی دهد.

اگر کد غیر GO یک کنترل کننده سیگنال را برای هر یک از سیگنال های ناهمزمان نصب کند ، ممکن است از کنترل کننده سیگنال GO استفاده کند یا همانطور که انتخاب می کند. به طور طبیعی ، اگر از کنترل کننده سیگنال GO استفاده نکند ، رفتار GO که در بالا توضیح داده شد رخ نخواهد داد. این می تواند به ویژه با سیگنال SIGPROF مسئله ای باشد.

کد غیر GO نباید ماسک سیگنال را روی هر موضوعی که توسط زمان اجرا Go ایجاد شده است تغییر دهد. اگر کد غیر GO موضوعات جدیدی از خود را شروع کند ، ممکن است ماسک سیگنال را همانطور که می خواهد تنظیم کند.

اگر کد غیر GO یک موضوع جدید را شروع کند ، ماسک سیگنال را تغییر می دهد و سپس یک عملکرد GO را در آن موضوع فراخوانی می کند ، زمان اجرا به طور خودکار سیگنال های خاصی را از بین می برد: سیگنال های همزمان ، سیگیل ، Sigtrap ، Sigstkflt ، Sigchld ، Sigprof ، Sigcancel، و sigsetxid. با بازگشت عملکرد GO ، ماسک سیگنال غیر GO ترمیم می شود.

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

در صورت دریافت سیگنال SIGPIPE ، در صورت دریافت SIGPIPE در یک موضوع GO ، برنامه GO از دستگیره ویژه ای که در بالا توضیح داده شده است ، فراخوانی می کند. اگر سیگپی روی یک موضوع غیر GO دریافت شود ، در صورت وجود سیگنال به کنترل کننده غیر Go ارسال می شود. در صورت وجود هیچ کدام ، کنترل کننده سیستم پیش فرض باعث خاتمه برنامه می شود.

برنامه های غیر GO که با کد GO تماس می گیرند

هنگامی که کد GO با گزینه هایی مانن د-BuildMode = C-Shared ساخته شده است ، به عنوان بخشی از یک برنامه غیر GO موجود اجرا می شود. کد غیر GO ممکن است هنگام شروع کد GO ، دستگیرندگان سیگنال را نصب کرده باشد (که ممکن است در موارد غیرمعمول هنگام استفاده از CGO یا SWIG اتفاق بیفتد ؛ در این حالت ، بحث در اینجا اعمال می شود). برا ی-BuildMode = C-Archive زمان اجرا GO سیگنال ها را در زمان سازنده جهانی آغاز می کند. برا ی-BuildMode = c-shared زمان اجرای GO هنگام بارگیری کتابخانه مشترک ، سیگنال ها را آغاز می کند.

اگر Go Runtime یک سیگنال موجود برای سیگنال های Sigcancel یا Sigsetxid (که فقط در لینوکس استفاده می شود) مشاهده می کند ، پرچم SA_ONSTACK را روشن می کند و در غیر این صورت کنترل کننده سیگنال را نگه می دارد.

برای سیگنال های همزمان و Sigpipe ، Go Runtime یک کنترل کننده سیگنال نصب می کند. این کنترل کننده سیگنال موجود را ذخیره می کند. اگر یک سیگنال همزمان هنگام اجرای کد غیر GO وارد شود ، زمان اجرا به جای کنترل کننده سیگنال GO ، از کنترل کننده سیگنال موجود فراخوانی می شود.

کد ساخته شده ب ا-BuildMode = C-Archive ی ا-BuildMode = C-Shared به طور پیش فرض هیچ گیرنده سیگنال دیگری نصب نمی کند. اگر یک کنترل کننده سیگنال موجود وجود داشته باشد ، زمان اجرای Go پرچم SA_ONSTACK را روشن می کند و در غیر این صورت کنترل کننده سیگنال را نگه می دارد. اگر Notify برای یک سیگنال ناهمزمان فراخوانده شود ، یک کنترل کننده سیگنال GO برای آن سیگنال نصب می شود. اگر بعداً تنظیم مجدد برای آن سیگنال فراخوانی شود ، دست زدن به آن سیگنال دوباره نصب می شود و در صورت وجود کنترل کننده سیگنال غیر GO را بازیابی می کند.

GO CODE ساخته شده بدو ن-buildmode = c-archive ی ا-buildmode = c-shared یک کنترل کننده سیگنال برای سیگنال های ناهمزمان ذکر شده در بالا نصب می کند و هر یک از کنترل کننده سیگنال موجود را ذخیره می کند. اگر سیگنال به یک موضوع غیر GO تحویل داده شود ، همانطور که در بالا توضیح داده شد ، عمل می کند ، به جز اینکه اگر یک کنترل کننده سیگنال غیر GO موجود وجود داشته باشد ، قبل از بالا بردن سیگنال نصب می شود.

پنجره ها ¶

در ویندوز A ^C (Control-C) یا ^Break (کنترل- شکست) به طور معمول باعث می شود که برنامه از آن خارج شود. در صورت فراخوانی برای Os. Interupt ، ^C یا ^BREAK باعث می شود OS. INTRUPT در کانال ارسال شود و برنامه از آن خارج نمی شود. اگر تنظیم مجدد فراخوانده شود ، یا توقف در تمام کانال های منتقل شده برای اطلاع رسانی فراخوانی می شود ، پس رفتار پیش فرض ترمیم می شود.

علاوه بر این ، در صورت فراخوانی شده ، و ویندوز ctrl_close_event ، ctrl_logoff_event یا ctrl_shutdown_event را به این فرآیند می فرستد ، به این امر اطلاع می دهد syscall. sigterm را بازگرداند. بر خلاف Control-C و Control-Break ، اطلاع رسانی رفتار فرآیند را تغییر نمی دهد وقتی ctrl_close_event ، ctrl_logoff_event یا ctrl_shutdown_event دریافت می شود-این روند هنوز خاتمه می یابد مگر اینکه از بین برود. اما دریافت syscall. sigterm به این فرایند فرصتی برای پاکسازی قبل از خاتمه می دهد.

برنامه 9

در برنامه 9 ، سیگنال ها دارای نوع syscall. note هستند که یک رشته است. تماس با Notify با یک syscall. note باعث می شود که هنگام ارسال آن رشته به عنوان یادداشت ، این مقدار در کانال ارسال شود.

فهرست مطالب ¶

  • Funcore نادیده گرفتن (Sig. Os. Signal)
  • عملکرد نادیده گرفته شده (sig os. signal) bool
  • FUNC NONTIFY (C chan
  • FUNC NOTIFYCONTEXT (Context. Context ، سیگنال ها
  • تنظیم مجدد Func (Sig. Os. Signal)
  • توقف Func (C Chan
اخبار رمز ارزها...
ما را در سایت اخبار رمز ارزها دنبال می کنید

برچسب : نویسنده : علی‌محمد افغانی بازدید : 15 تاريخ : پنجشنبه 19 مرداد 1402 ساعت: 18:18