ฉันมีสคริปต์ยูทิลิตี้ php สั้น ๆ ฉันเรียกใช้จาก cli ง่ายๆด้วย:
php myscript.php
สคริปต์ทำงานอยู่เสมอ โดยทำงานบางอย่างเป็นระยะ (ไม่เกี่ยวข้องกับคำถาม) ไม่ต้องการอินพุตใด ๆ จากผู้ใช้ หลังจากรันแล้ว ฉันมักจะกด CTRL+z จากนั้นรัน bg
เพื่อวางกระบวนการไว้ในเบื้องหลัง และทุกอย่างเรียบร้อยดี
ถ้าฉันรันมันเป็น:
php myscript.php &
สคริปต์วางอยู่บนพื้นหลังเมื่อเริ่มต้น แต่ยังอยู่ในสถานะหยุดทำงานด้วย ตัวอย่าง:
[1] 11513
[1]+ Stopped php myscript.php
แม้การเรียกใช้ bg
ณ จุดนี้ไม่ได้ช่วยอะไร ฉันต้องเรียกใช้ fg
จากนั้น CTRL+z และ bg
อีกครั้งเพื่อให้มันใช้งานได้
นี่คือสคริปต์ php:
<?
while(true){
echo 'hi '.time()."\n";
sleep(30);
}
?>
ปัญหาของฉันคือฉันไม่สามารถรันมันในเบื้องหลังได้โดยตรง เพราะระบบหยุดมัน และฉันไม่เข้าใจว่าทำไม ฉันจะแก้ไขปัญหานี้ได้อย่างไร?
อัปเดต:
ฉันสร้างสคริปต์เดียวกันในเวอร์ชัน bash และสามารถเรียกใช้และวางไว้ในพื้นหลังได้ (ทำงานและไม่หยุด) เพียงแค่เปิดใช้งานด้วย & ในตอนท้าย (script.sh &
)
script.sh:
#!/bin/bash
while true; do
echo `date`
sleep 30
done
เหตุใดสคริปต์ php จึงหยุดทำงานหลังจากเปิดใช้งานในเบื้องหลัง และสคริปต์ทุบตีไม่ทำงาน อะไรทำให้เกิดพฤติกรรมที่แตกต่างออกไปนี้