SIGINFO บน GNU Linux (Arch Linux) หายไป


12

ฉันกำลังพัฒนาแอปพลิเคชันและฉันต้องการพิมพ์สถิติรันไทม์บางส่วนไปยังคอนโซลตามต้องการ killและสัญญาณมาถึงใจของฉันทันที

การอ่านสัญญาณ Unixบน Wiki SIGINFOดูเหมือนจะเป็นไปได้เพราะ:

  • มันมีไว้สำหรับวัตถุประสงค์เหล่านี้
  • ไม่ยุติกระบวนการหากไม่มีการใช้งานตัวจัดการสัญญาณ (ตรงกันข้ามกับSIGUSRx- ดูที่นี่ )

อย่างไรก็ตามโดยการตรวจสอบผลลัพธ์ของkill -lดูเหมือนว่าเซิร์ฟเวอร์ของฉันไม่ได้ใช้สัญญาณนี้

คำถามของฉันคือ:

  1. ทำไมSIGINFOระบบของฉันถึงหายไป มันหายไปกับระบบ GNU Linux ทั้งหมดหรือไม่?
  2. มีวิธีง่าย ๆ (เช่นไม่มีเคอร์เนล / glibc recompilation) เพื่อเปิดใช้งานสัญญาณนี้หรือไม่? ถ้าไม่มีสิ่งใดจะเป็นวิธีที่ยาก?
  3. ฉันสามารถใช้สัญญาณทางเลือกใดเพื่อจุดประสงค์ของฉันที่จะไม่ทำให้เกิดผลข้างเคียงใด ๆหากไม่ได้รับการจัดการโดยกระบวนการเป้าหมาย (ฉันไม่คิดเลยเพราะฉันไม่สามารถหาสัญญาณอื่นที่เหมาะสมในคู่มือของglibc )

Linux metainfo:

Linux whatever 3.18.2-2-ARCH #1 SMP PREEMPT Fri Jan 9 07:37:51 CET 2015 x86_64 GNU/Linux

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


2
ไม่^Tปรากฏในการส่งออกของstty -a?
Mark Plotnick

อ่าไม่ได้ - ฉันต้องเข้าใจผิดว่าพฤติกรรมที่อธิบายไว้ddใน Mac ของฉัน ^Tระหว่างddการดำเนินการไม่ได้ทำอะไรบนเครื่อง Linux - ฉันจะอัปเดตคำถามตาม
Robert Rossmann

ใช่ Ctrl-T และ SIGINFO เป็นคุณสมบัติ BSD (และ MacOSX)
Mark Plotnick

แต่สัญญาณถูกกำหนดไว้ในGNU C Libraryซึ่งระบบ Linux ใช้ ... มันถูกปิดการใช้งานตามวัตถุประสงค์หรือไม่?
Robert Rossmann

1
@RobertRossmann สัญญาณถูกส่งโดยเคอร์เนล คำถามคือทำไมเคอร์เนลของ Linux ไม่สามารถใช้งานได้ (เพราะคัดลอกสัญญาณ SysV น่าจะเป็น)
Ángel

คำตอบ:


4

มีการพูดคุย (ย้อนกลับไปใน linux 0.x-1.x วัน) ของการเพิ่มสิ่งนี้ (เพราะมันมีประโยชน์ในระบบ BSD) แต่ถ้าฉันจำได้อย่างถูกต้องมีเหตุผลที่ยากที่จะทำบน Linux ได้ดีกว่า BSD ในเวลานั้น .

โปรดทราบว่าสิ่งที่คุณถามเป็นเพียงส่วนเล็ก ๆ ของคุณสมบัติ (กล่าวคือคุณกำลังพูดถึงstty infoรายการสำหรับการควบคุม -T ทำให้เคอร์เนลส่งSIGINFOไปยังttyกลุ่มกระบวนการของ) - ส่วนนั้นคือ "ง่าย" - แต่การมีข้อมูลรายงานเคอร์เนลเกี่ยวกับสถานะของกระบวนการเมื่อไม่จัดการสัญญาณ (เนื่องจากในเวลานั้นมีบางสิ่งที่ได้รับการสนับสนุนคุณลักษณะนั้นส่วนใหญ่เกี่ยวกับ "กระบวนการนี้กำลังหมุนหรือหยุด" และ "กระบวนการใดเป็น อย่างไรก็ตาม) ยากกว่า - ISTR ยังมีปัญหาด้านความปลอดภัย / ความน่าเชื่อถือเกี่ยวกับการแสดงข้อมูลนั้นอย่างถูกต้องและควรเชื่อมโยงกับเส้นทาง Secure Attention Key หรือไม่ ที่กล่าวว่าอาจมีค่าในรุ่น "ง่าย" ที่ส่งสัญญาณเท่านั้น ...

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


1

เกี่ยวกับคำถามของคุณ 1):

จากman 7 signalบนระบบ Arch Linux:

SIGINFO 29, -, - คำพ้องความหมายสำหรับSIGPWR

...

(สัญญาณ 29 คือSIGINFO / SIGPWRบนอัลฟ่า แต่SIGLOSTบน sparc)

...

SIGPWR (ซึ่งไม่ได้ระบุใน POSIX.1-2001) โดยทั่วไปจะถูกละเว้นตามค่าเริ่มต้นในระบบ UNIX อื่น ๆ ที่ปรากฏขึ้น

ตามคำจำกัดความนี้มีให้SIGINFOเฉพาะบนสถาปัตยกรรมอัลฟาหรือสปาร์กเท่านั้น

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