ฉันกำลังมองหาวิธีที่จะใช้ coredump ที่ไม่ล่วงล้ำของกระบวนการทำงานบน Linux
ฉันคุ้นเคยกับ gdb gcore
แต่สามารถทำงานได้เมื่อgdb
เชื่อมต่อกับกระบวนการและหยุดการดีบักเท่านั้น สำหรับดัมพ์หลักขนาดใหญ่ที่อาจหมายถึงหลายวินาทีหรือแม้กระทั่งสองสามนาทีของการประมวลผลที่ถูกขัดจังหวะ
มีทางเลือกที่ไม่มีการบล็อกหรือไม่?
ลินุกซ์สนับสนุนคัดลอกเมื่อเขียนหน่วยความจำซึ่งมันต้องอาศัยการสนับสนุนโดยไม่ต้องfork()
exec()
ดังนั้นฉันจึงคิดถึงสิ่งที่ระดับเคอร์เนลซึ่งเคอร์เนลใช้สแนปช็อต copy-on-write ของตารางหน้ากระบวนการของกระบวนการที่ถูกเททิ้งแล้วเขียนแกนออกในขณะที่กระบวนการดั้งเดิมยังคงทำงานอยู่
ฉันค่อนข้างมั่นใจว่าฉันสามารถใช้gdb
เพื่อบังคับเด็กfork()
แล้วทิ้งในขณะที่ผู้ปกครองดำเนินการอย่างมีความสุขจากนั้นwait()
ในผู้ปกครองเพื่อเก็บเกี่ยวเด็กหลังจากการเลิกจ้าง แม้ว่าจะยุ่งและยังคงต้องมีการขัดจังหวะสองขั้นตอนของกระบวนการหลักแม้ว่าจะเป็นกระบวนการสั้น
แน่นอนว่ามีคนต้องการสิ่งนี้มาก่อนหรือไม่