SIGSTOP
และSIGKILL
เป็นสัญญาณสองสัญญาณที่ไม่สามารถจับและจัดการโดยกระบวนการ SIGTSTP
เป็นเช่นSIGSTOP
นั้นยกเว้นว่าสามารถถูกจับและจัดการได้
SIGSTOP
และสัญญาณหยุดกระบวนการในเพลงของพร้อมสำหรับSIGTSTP
SIGCONT
เมื่อคุณส่งกระบวนการSIGTERM
นั้นกกระบวนการจะไม่ทำงานดังนั้นจึงไม่สามารถเรียกใช้รหัสเพื่อออกได้
(นอกจากนี้ยังมีSIGTTIN
และSIGTTOU
ซึ่งเป็นสัญญาณที่สร้างขึ้นโดยเลเยอร์ TTY เมื่องานที่มีพื้นหลังพยายามอ่านหรือเขียนไปยังเทอร์มินัลพวกเขาสามารถถูกจับได้ แต่จะหยุด (หยุดชั่วคราว) กระบวนการเหมือนSIGTSTP
กัน แต่ตอนนี้ฉันจะไป เพื่อเพิกเฉยสองสิ่งนี้สำหรับคำตอบที่เหลือ)
คุณCtrlZส่งเป็นกระบวนการSIGTSTP
ซึ่งดูเหมือนจะไม่ได้รับการจัดการพิเศษในทางใดทางหนึ่งโดยrsyslogd
ดังนั้นมันก็ระงับกระบวนการที่ค้างอยู่หรือSIGCONT
SIGKILL
วิธีการแก้ปัญหาที่นี่คือการส่งSIGCONT
หลังจากของคุณSIGTERM
เพื่อให้กระบวนการสามารถรับและจัดการสัญญาณ
ตัวอย่าง:
sleep 999 &
# Assume we got PID 456 for this process
kill -TSTP 456 # Suspend the process (nicely)
kill -TERM 456 # Terminate the process (nicely). Nothing happens
kill -CONT 456 # Continue the process so it can exit cleanly
เอกสารสำหรับGNU C Libraryอธิบายได้ค่อนข้างดีฉันคิดว่า (การเน้นของฉัน):
ในขณะที่กระบวนการที่จะหยุดการทำงานไม่มีสัญญาณอื่น ๆ สามารถส่งมอบให้กับมันจนกว่าจะมีอย่างต่อเนื่องยกเว้นSIGKILL
สัญญาณและ (ชัด) SIGCONT
สัญญาณ สัญญาณจะถูกทำเครื่องหมายว่าค้างอยู่ แต่จะไม่ส่งจนกว่ากระบวนการจะดำเนินการต่อ สัญญาณมักจะทำให้เกิดการเลิกจ้างของกระบวนการและไม่สามารถปิดกั้นจัดการหรือละเว้น คุณสามารถเพิกเฉยได้ แต่จะทำให้กระบวนการดำเนินต่อไปได้เสมอหากหยุด การส่งสัญญาณไปยังกระบวนการทำให้สัญญาณหยุดใด ๆ ที่รอดำเนินการสำหรับกระบวนการนั้นถูกยกเลิก เช่นเดียวกันสัญญาณใด ๆ ที่ค้างอยู่สำหรับกระบวนการจะถูกยกเลิกเมื่อได้รับสัญญาณหยุดSIGKILL
SIGCONT
SIGCONT
SIGCONT
kill -15
คุณส่งไปแล้ว"