คำถามติดแท็ก signals

สัญญาณคือการแจ้งเตือนไปยังกระบวนการที่มีเหตุการณ์เกิดขึ้น สัญญาณบางครั้งอธิบายว่าซอฟต์แวร์ขัดจังหวะ สัญญาณมีความคล้ายคลึงกับการขัดจังหวะของฮาร์ดแวร์เนื่องจากขัดขวางขั้นตอนการทำงานปกติของโปรแกรม ในกรณีส่วนใหญ่ไม่สามารถคาดเดาได้อย่างแน่นอนว่าสัญญาณจะมาถึงเมื่อใด มีการกำหนดไว้ในมาตรฐาน C และขยายใน POSIX แต่ภาษา / ระบบการเขียนโปรแกรมอื่น ๆ อีกมากมายก็ให้การเข้าถึงเช่นกัน

14
มีอะไรฆ่ากระบวนการของฉันและทำไม
แอปพลิเคชันของฉันทำงานเป็นกระบวนการพื้นหลังบน Linux ขณะนี้มันเริ่มต้นที่บรรทัดคำสั่งในหน้าต่าง Terminal เมื่อเร็ว ๆ นี้ผู้ใช้กำลังดำเนินการแอปพลิเคชันอยู่ครู่หนึ่งและมันก็ตายอย่างลึกลับ ข้อความ: ถูกฆ่าตาย อยู่บนสถานี เรื่องนี้เกิดขึ้นสองครั้ง ฉันถามว่ามีใครบางคนที่เทอร์มินัลอื่นใช้คำสั่ง kill เพื่อฆ่ากระบวนการหรือไม่ เลขที่ ภายใต้เงื่อนไขใดที่ Linux จะตัดสินใจฆ่ากระบวนการของฉัน ฉันเชื่อว่าเชลล์แสดงข้อความ "kill" เนื่องจากกระบวนการตายหลังจากได้รับสัญญาณ kill (9) หาก Linux ส่งสัญญาณ kill ควรมีข้อความในบันทึกของระบบที่อธิบายว่าทำไมมันถึงถูกฆ่า?
614 linux  process  kill  signals 

12
ฉันจะจับ SIGINT ใน Python ได้อย่างไร
ฉันกำลังทำงานกับสคริปต์หลามที่เริ่มต้นกระบวนการและการเชื่อมต่อฐานข้อมูลหลายอย่าง ทุก ๆ ครั้งที่ฉันต้องการฆ่าสคริปต์ด้วยสัญญาณCtrl+ Cและฉันต้องการจะล้างข้อมูล ใน Perl ฉันจะทำสิ่งนี้: $SIG{'INT'} = 'exit_gracefully'; sub exit_gracefully { print "Caught ^C \n"; exit (0); } ฉันจะทำอะนาล็อกของสิ่งนี้ใน Python ได้อย่างไร
535 python  controls  signals 

30
วิธีที่ดีที่สุดในการส่งสัญญาณไปยังสมาชิกทุกคนของกลุ่มกระบวนการคืออะไร?
ฉันต้องการฆ่าต้นไม้กระบวนการทั้งหมด วิธีที่ดีที่สุดในการทำสิ่งนี้โดยใช้ภาษาสคริปต์ทั่วไปคืออะไร ฉันกำลังมองหาทางออกที่ง่าย
422 linux  shell  process  signals 

10
วิธีป้องกัน SIGPIPE (หรือจัดการอย่างถูกต้อง)
ฉันมีโปรแกรมเซิร์ฟเวอร์ขนาดเล็กที่ยอมรับการเชื่อมต่อบนซ็อกเก็ต TCP หรือ UNIX ในพื้นที่อ่านคำสั่งง่าย ๆ และส่งคำตอบกลับขึ้นอยู่กับคำสั่ง ปัญหาคือไคลเอนต์อาจไม่สนใจคำตอบในบางครั้งและออกก่อนเวลาดังนั้นการเขียนลงในซ็อกเก็ตนั้นจะทำให้เกิด SIGPIPE และทำให้เซิร์ฟเวอร์ของฉันทำงานล้มเหลว การปฏิบัติที่ดีที่สุดในการป้องกันความผิดพลาดคืออะไร มีวิธีการตรวจสอบว่าอีกด้านของบรรทัดยังอ่านอยู่หรือไม่? (select () ดูเหมือนจะไม่ทำงานที่นี่เพราะมันบอกว่าซ็อกเก็ตเขียนได้เสมอ) หรือฉันควรจับ SIGPIPE ด้วยเครื่องจัดการและเพิกเฉย?
260 c  io  signals  broken-pipe  sigpipe 

9
เป็นไปได้หรือไม่ที่จะจับสัญญาณ Ctrl + C และเรียกใช้ฟังก์ชั่นการล้างข้อมูลในแบบ "เลื่อน"
ฉันต้องการจับสัญญาณCtrl+C( SIGINT) ที่ส่งจากคอนโซลและพิมพ์ผลรวมการวิ่งบางส่วน เป็นไปได้ไหมที่ Golang? หมายเหตุ: เมื่อครั้งแรกที่ผมโพสต์คำถามที่ผมสับสนเกี่ยวกับCtrl+Cการเป็นแทนSIGTERMSIGINT
207 signals  go  sigterm 


9
ความแตกต่างระหว่าง sigaction และสัญญาณคืออะไร?
ฉันกำลังจะเพิ่มตัวจัดการสัญญาณพิเศษลงในแอพที่เรามีที่นี่และฉันสังเกตเห็นว่าผู้เขียนเคยsigaction()ตั้งค่าตัวจัดการสัญญาณอื่น ๆ signal()ฉันกำลังจะไปใช้ ในการติดตามการประชุมฉันควรใช้sigaction()แต่ถ้าฉันเขียนตั้งแต่ต้นฉันควรเลือกแบบไหนดี?
143 c  signals  posix 



2
การจัดการสัญญาณที่มีหลายเธรดใน Linux
ใน Linux จะเกิดอะไรขึ้นเมื่อโปรแกรม (ซึ่งอาจมีหลายเธรด) ได้รับสัญญาณเช่น SIGTERM หรือ SIGHUP กระทู้ไหนดักฟังสัญญาณ หลายเธรดสามารถรับสัญญาณเดียวกันได้หรือไม่? มีเธรดพิเศษเฉพาะสำหรับการจัดการสัญญาณหรือไม่? ถ้าไม่เกิดอะไรขึ้นภายในเธรดที่จัดการสัญญาณ? การดำเนินการจะดำเนินต่อไปอย่างไรหลังจากรูทีนตัวจัดการสัญญาณเสร็จสิ้น
119 c  linux  multithreading  signals  ipc 


4
ฉันจะตรวจจับ SIGSEGV (ข้อผิดพลาดในการแบ่งส่วน) และรับสแต็กติดตามภายใต้ JNI บน Android ได้อย่างไร
ฉันกำลังย้ายโปรเจ็กต์ไปยัง Android Native Development Kit (เช่น JNI) และฉันต้องการจับ SIGSEGV หากเกิดขึ้น (อาจเป็น SIGILL, SIGABRT, SIGFPE) เพื่อนำเสนอกล่องโต้ตอบการรายงานข้อขัดข้องที่ดีแทน (หรือก่อนหน้า) สิ่งที่เกิดขึ้นในปัจจุบัน: การเสียชีวิตอย่างไม่เป็นโรคในทันทีของกระบวนการและระบบปฏิบัติการอาจพยายามเริ่มต้นใหม่ ( แก้ไข: JVM / Dalvik VM จับสัญญาณและบันทึกการติดตามสแต็กและข้อมูลที่เป็นประโยชน์อื่น ๆ ฉันแค่ต้องการเสนอตัวเลือกให้ผู้ใช้ส่งอีเมลข้อมูลนั้นให้ฉันจริงๆ) สถานการณ์คือโค้ด C ขนาดใหญ่ที่ฉันไม่ได้เขียนทำงานส่วนใหญ่ในแอปพลิเคชันนี้ (ตรรกะของเกมทั้งหมด) และแม้ว่าจะผ่านการทดสอบอย่างดีบนแพลตฟอร์มอื่น ๆ มากมาย แต่ก็เป็นไปได้ทั้งหมดที่ฉันใน Android ของฉัน พอร์ตจะป้อนขยะและทำให้เกิดข้อผิดพลาดในโค้ดเนทีฟดังนั้นฉันต้องการให้การถ่ายโอนความผิดพลาด (ทั้งเนทีฟและ Java) ที่แสดงในบันทึกของ Android (ฉันเดาว่ามันน่าจะเป็น stderr ในสถานการณ์ที่ไม่ใช่ Android) ฉันมีอิสระที่จะแก้ไขทั้งรหัส C และ Java …

17
ฉันสามารถส่ง ctrl-C (SIGINT) ไปยังแอปพลิเคชันบน Windows ได้หรือไม่
ฉันได้ (ในอดีต) เขียนข้ามแพลตฟอร์ม (Windows / Unix) การใช้งานซึ่งเมื่อเริ่มต้นจากบรรทัดคำสั่งการจัดการผู้ใช้พิมพ์Ctrl- Cรวมกันในลักษณะเดียวกัน (เช่นการยกเลิกการสมัครเรียบร้อย) เป็นไปได้ไหมใน Windows ที่จะส่งCtrl- C/ SIGINT / เทียบเท่ากับกระบวนการจากกระบวนการอื่น (ที่ไม่เกี่ยวข้อง) เพื่อขอให้ยุติอย่างหมดจด (ให้โอกาสในการจัดระเบียบทรัพยากร ฯลฯ )

7
ฉันควรส่งสัญญาณไปยังกระบวนการปิดระบบอย่างสง่างามในลำดับใด
ในความคิดเห็นเกี่ยวกับคำตอบของคำถามอื่นผู้แสดงความคิดเห็นกล่าวว่า: อย่าใช้ kill -9 เว้นแต่จำเป็นจริงๆ! SIGKILL ไม่สามารถติดกับดักได้ดังนั้นโปรแกรมที่ถูกฆ่าจึงไม่สามารถรันขั้นตอนการปิดระบบใด ๆ เพื่อลบไฟล์ชั่วคราว ขั้นแรกให้ลองใช้ HUP (1) จากนั้น INT (2) จากนั้นจึง QUIT (3) ฉันเห็นด้วยในหลักการเกี่ยวกับSIGKILLแต่ส่วนที่เหลือเป็นข่าวสำหรับฉัน เนื่องจากสัญญาณเริ่มต้นที่ส่งมาkillคือSIGTERMฉันคาดว่าจะเป็นสัญญาณที่คาดหวังมากที่สุดสำหรับการปิดกระบวนการโดยพลการอย่างสง่างาม นอกจากนี้ฉันพบว่ามีการSIGHUPใช้ด้วยเหตุผลที่ไม่ยุติเช่นการบอก daemon ว่า "อ่านไฟล์ config ของคุณอีกครั้ง" และสำหรับฉันแล้วดูเหมือนว่าSIGINT(การขัดจังหวะแบบเดียวกับที่คุณมักจะได้รับจาก Ctrl-C ใช่ไหม) ไม่ได้รับการสนับสนุนอย่างกว้างขวางเท่าที่ควรหรือยุติอย่างไม่น่าเคารพ ระบุว่าSIGKILLเป็นทางเลือกสุดท้าย - คุณควรส่งสัญญาณใดและในลำดับใดไปยังกระบวนการตามอำเภอใจเพื่อที่จะปิดมันลงอย่างสง่างามที่สุด โปรดยืนยันคำตอบของคุณพร้อมข้อมูลสนับสนุน (นอกเหนือจากความชอบส่วนตัวหรือความคิดเห็น) หรือข้อมูลอ้างอิงหากทำได้ หมายเหตุ: ฉันสนใจแนวทางปฏิบัติที่ดีที่สุดซึ่งรวมถึงการพิจารณา bash / Cygwin เป็นพิเศษ แก้ไข:จนถึงตอนนี้ดูเหมือนจะไม่มีใครพูดถึง INT หรือ QUIT และมีการกล่าวถึง HUP อย่าง จำกัด …

8
จะหลีกเลี่ยงการใช้ printf ในเครื่องจัดการสัญญาณได้อย่างไร?
เนื่องจากprintfไม่ได้รับการส่งกลับจึงไม่ควรใช้ในเครื่องจัดการสัญญาณอย่างปลอดภัย แต่ฉันเคยเห็นโค้ดตัวอย่างมากมายที่ใช้printfวิธีนี้ ดังนั้นคำถามของฉันคือเมื่อใดที่เราต้องหลีกเลี่ยงการใช้printfในเครื่องจัดการสัญญาณและมีการแนะนำให้เปลี่ยนหรือไม่
87 c  linux  signals 

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