Saya memiliki skrip utilitas php pendek, saya menjalankannya dari cli hanya dengan:
php myscript.php
Script selalu berjalan, melakukan beberapa tugas secara berkala (tidak relevan dengan pertanyaan). Itu tidak memerlukan masukan apa pun dari pengguna. Setelah menjalankannya, saya biasanya menekan CTRL+z lalu menjalankan bg
untuk meletakkan proses di latar belakang, dan semuanya baik-baik saja.
Jika saya menjalankannya sebagai:
php myscript.php &
skrip diletakkan di latar belakang pada saat awal, tetapi juga ditempatkan dalam keadaan berhenti. Contoh:
[1] 11513
[1]+ Stopped php myscript.php
bahkan menjalankan bg
pada saat ini tidak membantu, saya harus menjalankan fg
, lalu CTRL+z dan bg
lagi untuk membuatnya berfungsi.
Ini skrip phpnya:
<?
while(true){
echo 'hi '.time()."\n";
sleep(30);
}
?>
Masalah saya adalah saya tidak dapat menjalankannya langsung di latar belakang, karena sistem menghentikannya, dan saya tidak mengerti alasannya. Bagaimana cara memperbaikinya?
pembaruan:
Saya membuat versi bash dari skrip yang sama, dan skrip tersebut dapat dijalankan dan diletakkan di latar belakang (berjalan dan tidak dihentikan) hanya dengan meluncurkannya dengan & pada akhirnya (script.sh &
)
skrip.sh:
#!/bin/bash
while true; do
echo `date`
sleep 30
done
Mengapa skrip php dihentikan setelah diluncurkan di latar belakang, dan skrip bash tidak? Apa yang menyebabkan perilaku berbeda ini?