เมื่อฉันเรียกใช้คำสั่ง ( make
ในโครงการขนาดใหญ่) จากเชลล์ฉันสามารถพิมพ์ Ctrl-Z เพื่อหยุดกระบวนการและกลับไปที่เชลล์ ต่อจากนั้นฉันสามารถเรียกใช้fg
เพื่อดำเนินการตามกระบวนการต่อไป
ฉันกำลังพยายามเขียนเชลล์สคริปต์เพื่อทำสิ่งนี้โดยอัตโนมัติ (โดยเฉพาะเพื่อตรวจสอบอุณหภูมิ CPU ของฉันทุกสองสามวินาทีและหยุดกระบวนการถ้ามันร้อนเกินไปเนื่องจากคอมพิวเตอร์ของฉันมีแนวโน้มที่จะร้อนเกินไป) ความพยายามครั้งแรกของฉันทำงานเช่นนี้ (ลดความซับซ้อน):
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
น่าเสียดายที่นี่ใช้งานไม่ได้ การส่ง SIGSTOP ไปยังกระบวนการไม่ได้หยุดชั่วคราว (ดังที่เห็นได้ชัดจากการดำเนินการส่งเอาต์พุตไปยังเทอร์มินัล) ฉันวิ่งไปmake &
ที่บรรทัดคำสั่งส่ง SIGSTOP และตรวจสอบสถานะกระบวนการด้วยps
; มันถูกระบุว่าหยุด (และเริ่มอีกครั้งเมื่อฉันส่ง SIGCONT) แต่มันก็ยังคงพ่นออกมาและทำให้อุณหภูมิแกนของฉันเพิ่มขึ้น! การหยุดด้วย Ctrl-Z ไม่เคยมีปัญหานี้ แต่ฉันไม่รู้วิธีการทำในสคริปต์
อะไรทำให้ Ctrl-Z แตกต่างจากkill -STOP
และฉันจะทำให้พฤติกรรมของอดีตในเชลล์สคริปต์ได้อย่างไร
make
จะถูกเรียกใช้ซ้ำ อันที่จริงฉันคิดว่ามันลึกลงไปหลายระดับ