รับพฤติกรรมของโปรแกรมเมื่อสังหาร -HUP แล้วหรือยัง


32

มีวิธีใดบ้างที่จะทราบว่าโปรแกรมจะทำอะไรเมื่อได้รับสัญญาณการฆ่า HUP
โดยไม่ต้องรันคำสั่ง ofc: D

ตัวอย่างเช่น
killall -HUP pppdจะรีสตาร์ท pppd
killall -HUP firefoxเพียง แต่จะฆ่า firefox

คำตอบ:


47

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

หากคุณมีแหล่งที่มาคุณสามารถอ่านได้เช่นกัน หรือถ้าคุณมีไบนารีคุณสามารถลองแยกส่วนค้นหาsigactionสายที่ตั้งค่าตัวจัดการสัญญาณSIGHUPและลองค้นหาว่าตัวจัดการสัญญาณเหล่านั้นกำลังทำอะไรอยู่ การจัดเรียงจะไม่ง่ายกว่าในการส่ง SIGHUP ไปยังโปรแกรมนั้นในตอนแรก

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


1
SIGHUP กลับไปสู่ยุคของโมเด็ม dial-up มันส่งสัญญาณ Hang-Up ของการเชื่อมต่อโมเด็ม ยังคงใช้กับการเชื่อมต่อที่ลดลง แต่วันนี้มันมักจะเป็นการวางสายที่ทำให้การเชื่อมต่อหลุดไป
BillThor

@bill True แต่เซสชัน SSH จะ SIGHUP เป็นกระบวนการย่อยถ้าขาดการเชื่อมต่อกับไคลเอ็นต์
Keith

@ Keith: นั่นเป็นเหตุผลที่ฉันระบุว่ามันใช้กับการเชื่อมต่อที่ลดลงและมักจะเกิดจากการวางสายอีกต่อไป มันอาจสร้างความสับสนในจุดนี้เพื่อเปลี่ยนชื่อเป็นสิ่งที่เกี่ยวข้องกับการยกเลิกการเชื่อมต่อเช่น SIGDCN
BillThor

18

การกระทำเริ่มต้นคือการยุติกระบวนการใน SIGHUP ดูman 7 signalรายละเอียดเพิ่มเติมได้ที่ แต่โปรแกรมสามารถดักจับและทำสิ่งที่พวกเขาต้องการ เนื่องจากกระบวนการ daemon ไม่ควรออกจากกระบวนการพวกเขามักใช้ SIGHUP เพื่อวัตถุประสงค์อื่นเช่นเริ่มต้นใหม่เอง (เหมือนที่ pppd ทำ) Firefox จะดำเนินการตามค่าเริ่มต้น

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