ทำไมมีสัญญาณที่ผู้ใช้กำหนดเพียงสองสัญญาณเท่านั้น


11

ในรายการสัญญาณที่กำหนดไว้ในระบบ linux มีสัญญาณสองสัญญาณที่ระบุว่าสัญญาณที่ผู้ใช้กำหนด ( SIGUSR1และSIGUSR2) สัญญาณอื่น ๆ จะถูกยกหรือจับในสถานการณ์ที่เฉพาะเจาะจง แต่ SIGUSR จะถูกทิ้งไว้เพื่อการใช้งานของผู้ใช้

เหตุใดจึงมีเพียงสองสัญญาณ

คำตอบ:


13

ในอดีต, Unix มีเพียงสองคนนี้สัญญาณ แต่ระบบที่ทันสมัยมีสัญญาณแบบ real-time ...SIGRTMINSIGRTMAX

เนื่องจากความหมายที่แปลกประหลาดและไม่สามารถพูดได้ของ API สัญญาณมีเกือบจะไม่มีกรณีการใช้งานที่สัญญาณจะดีกว่ากลไกการสื่อสารอื่น ๆ เช่นท่อ ดังนั้นการจัดสรรหมายเลขสัญญาณใหม่จึงไม่เคยมีความจำเป็น


ขอบคุณ ในกรณีของฉันฉันจัดการ SIGUSR1 สำหรับการกำหนดค่าใหม่ หมายความว่าเมื่อผู้ดูแลระบบต้องการเปลี่ยนการกำหนดค่าของกระบวนการทำงานของฉันมันจะเปลี่ยนไฟล์กำหนดค่าและส่ง SIGUSR1 ไปยัง PID ของฉัน (ใช้ท่อได้ง่ายขึ้นที่นี่) และฉันใช้ SIGUSR2 สำหรับการปิดกระบวนการใหม่ทั้งหมด ไม่จำเป็นสำหรับฉันที่จะใช้สัญญาณอื่นนอกเหนือจากสองสิ่งนี้ แต่คุณสมบัติรันไทม์บางอย่างสามารถนำไปใช้ได้โดยการจัดการสัญญาณที่ผู้ใช้กำหนดอื่น ๆ !
saeedn

2
@saeedn ทำไมคุณไม่ใช้ SIGTERM ในการปิดกระบวนการใหม่ทั้งหมด? นั่นคือสิ่งที่มันมีไว้เพื่อ เซิร์ฟเวอร์อื่น ๆ จำนวนมากใช้ SIGHUP (ซึ่งมีความหมายอย่างอื่นในกระบวนการโต้ตอบเท่านั้น) เป็นสัญญาณในการโหลดไฟล์การกำหนดค่าใหม่ดังนั้นคุณอาจพิจารณาว่า
Random832

@ Random832 คุณถูกต้องฉันรู้ว่าคุณพูดอะไร แต่ปัญหาที่ฉันคิดคือว่าจะเกิดอะไรขึ้นถ้าฉันหมดสัญญาณ 31 ตัวเลือก?
saeedn

1
ฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับ SIGRTMIN ได้อย่างไร ... สัญญาณ SIGRTMAX พวกเขาจะกำหนดไว้ที่ไหนเมื่อใช้งาน?
Strubbl

6

สัญญาณให้วิธีการสื่อสารแบบดั้งเดิมเท่านั้น โดยเฉพาะอย่างยิ่งไม่มีวิธีแนบข้อมูลใด ๆ กับพวกเขา ผู้รับเท่านั้นที่รู้หมายเลขสัญญาณไม่ใช่ตัวตนของผู้ส่ง สัญญาณจำนวนมากสามารถถูกรวมเข้าเป็นหนึ่งเดียว เมื่อพิจารณาจากข้อ จำกัด เหล่านี้มันไม่มีจุดประสงค์ที่เป็นประโยชน์มากมายสำหรับสัญญาณ

สำหรับวัตถุประสงค์ที่ซับซ้อนยิ่งขึ้นให้ใช้วิธีการที่ซับซ้อนยิ่งขึ้นของการโต้ตอบเช่นไพพ์หรือซ็อกเก็ต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.