กระบวนการที่หยุดไม่ทำงานต่อหลังจากส่ง SIGCONT


0

ฉันเริ่มต้นcatใน terminal:

$ cat

จากนั้นในสถานีที่สองฉันส่งสัญญาณหยุด:

$ kill -SIGSTOP $(pgrep cat)

และใช้งานได้ - catหยุด ตอนนี้ฉันต้องการปลุกcatกระบวนการนี้โดยการส่งSIGCONT:

$ kill -SIGCONT $(pgrep cat)

และไม่มีอะไรเกิดขึ้น อย่างไรก็ตามถ้าฉันใช้fgในเปลือกแรกแล้วcatจะตื่นขึ้น ทำไมSIGCONTไม่ดำเนินcatการต่อไป

คำตอบ:


2

การกดปุ่ม "ctrl-Z" ในเชลล์จะหยุดกระบวนการพื้นหน้าปัจจุบันโดยส่งSTOPสัญญาณ สิ่งนี้ (ฉันเชื่อว่า) ยังส่งผลให้อินพุตมาตรฐานของกระบวนการถูกแยกออกจากเชลล์ - ตอนนี้มันเป็นกระบวนการพื้นหลัง

bgคำสั่งจะส่งCONTINUEสัญญาณไปยังคำสั่ง แต่ไม่ได้เชื่อมต่อเข้ามาตรฐานของมันไปยังเปลือก เนื่องจาก cat กำลังรออินพุตมาตรฐานอยู่จึงหยุดทำงาน ดังที่คุณกล่าวถึงfgคำสั่งจะเชื่อมต่ออินพุตมาตรฐานกลับไปยังเชลล์

เมื่อคุณส่งSTOPสัญญาณไปยังกระบวนการเชลล์จะได้รับการแจ้งเตือนผ่านสัญญาณเด็กและวางไว้ในพื้นหลังและสิ่งเดียวกันจะเกิดขึ้น

คุณสามารถเห็นความแตกต่างเมื่อคุณกด "ctrl-Z":

[1]  + 8336 suspended  cat

และเมื่อคุณส่งSTOPสัญญาณด้วยตนเอง:

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