วิธีส่งและจับ SIGTERM ใน Bash และ Python

Withi Sng Laea Cab Sigterm Ni Bash Laea Python



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

เมื่อทำงานกับ Bash และ Python คุณสามารถส่งสัญญาณ SIGTERM เพื่อยุติกระบวนการทำงานอย่างนุ่มนวล โพสต์นี้ครอบคลุมเกี่ยวกับการส่งและจับ SIGTERM ใน Bash และ Python

SIGN TERM คืออะไร

ระบบ Unix มีสัญญาณสามประเภท: ระบบ อุปกรณ์ และสัญญาณที่ผู้ใช้กำหนด แต่ละสัญญาณมีค่าเป็นจำนวนเต็ม คุณสามารถดำเนินการสัญญาณโดยระบุชื่อหรือค่าจำนวนเต็ม







SIGTERM เป็นสัญญาณที่มีค่าจำนวนเต็มเท่ากับ 15 ซึ่งจะดำเนินการเมื่อคุณต้องการยุติกระบวนการที่กำลังทำงานอยู่อย่างนุ่มนวล ต่อไปนี้เป็นไวยากรณ์ที่จะใช้ SIGTERM ใน Bash:



ฆ่าระยะเป้าหมาย < PID >

หรือ

ฆ่า - สิบห้า < PID >

คุณสามารถตรวจสอบสัญญาณที่มีอยู่ทั้งหมดโดยใช้คำสั่งต่อไปนี้:



ฆ่า -l





วิธีส่งและจับ SIGTERM ใน Bash และ Python

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

1. การใช้สคริปต์ Python

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



เรามีสคริปต์ Python ที่จับจำนวนเต็มของสัญญาณที่ส่ง นอกจากนี้ยังจับ PID ของกระบวนการปัจจุบัน

ในภาพต่อไปนี้ เรารันสคริปต์ Python และมีลูป while ที่ทำงานทุกสองสามวินาที บนเทอร์มินัลอื่น เราสามารถส่งสัญญาณ SIGTERM เพื่อฆ่ากระบวนการโดยระบุ PID ที่เราได้รับจากการเรียกใช้สคริปต์ Python:

เมื่อเราส่งสัญญาณ SIGTERM เราสังเกตเห็นว่าสคริปต์หยุดดำเนินการ นั่นเป็นเพราะจับสัญญาณจำนวนเต็ม ในกรณีนี้ เราดำเนินการ kill -15 สำหรับสัญญาณ SIGTERM คุณยังสามารถส่งสัญญาณฆ่า SIGTERM โดยใช้คีย์เวิร์ด SIGTERM แทนค่าจำนวนเต็ม เรายังได้ผลเหมือนเดิม

คุณยังสามารถเรียกใช้งาน Python ของคุณโดยใช้ไวยากรณ์ต่อไปนี้:

หลาม3 < สคริปต์/งาน > &

ไม่เหมือนกับวิธีแรก เมื่อเราส่ง SIGTERM โดยใช้ตัวเลือกนี้ เราจะเห็นว่ารหัสงานถูกพิมพ์ออกมาเมื่องานเริ่มดำเนินการ หลังจากที่เราฆ่ามัน เราได้รับสถานะ 'เสร็จสิ้น' SIGTERM สามารถส่งได้โดยระบุชื่อหรือจำนวนเต็ม

2. การใช้ Bash Script

คุณสามารถใช้คำสั่ง 'trap' เพื่อจับสัญญาณเมื่อเรียกใช้งานสคริปต์ Bash ในตัวอย่างนี้ เราได้เพิ่มคำสั่ง 'trap' เพื่อจับสัญญาณ SIGTERM สคริปต์เป็นลูป 'สำหรับ' เพื่อดำเนินการคำสั่ง 'วันที่' หนึ่งพันครั้งหากไม่มีการส่งสัญญาณ SIGTERM

เมื่อเรียกใช้สคริปต์ Bash คุณสามารถส่งสัญญาณ SIGTERM ได้โดยการกดปุ่ม Ctrl + Z แป้นคีย์บอร์ด คำสั่ง 'trap' จับสัญญาณที่ส่ง และลูป 'for' จะออกจากการดำเนินการ คุณจะได้รับเอาต์พุตซึ่งยืนยันว่างานที่รันอยู่ได้รับสัญญาณ SIGTERM และหยุดทำงานแล้ว

นั่นคือวิธีที่คุณส่งและจับ SIGTERM ใน Bash

บทสรุป

คุณสามารถส่งสัญญาณที่แตกต่างกันเพื่อให้บรรลุเป้าหมายที่แตกต่างกันเมื่อดำเนินงานหรือโปรแกรม SIGTERM ถูกส่งเพื่อหยุดโปรแกรมอย่างนุ่มนวล สำหรับ Python คุณต้องมีตัวจัดการสัญญาณเพื่อจับสัญญาณ และคุณสามารถส่ง SIGTERM โดยใช้คำสั่ง “kill” คุณสามารถใช้คำสั่ง 'trap' และแป้นคีย์บอร์ดบน Bash เพื่อจับและส่งสัญญาณ SIGTERM โพสต์นี้นำเสนอตัวอย่างต่าง ๆ เกี่ยวกับวิธีการบรรลุผลโดยละเอียด