Почему мой процесс останавливается при запуске в фоновом режиме?

Я запускаю простой скрипт PHP на CentOS 6.5 с php5.3.3

#!/usr/bin/env php
<?php
echo "hello"."\n";
return 0;
?>

Моя проблема в том, что если я сделаю ./testscriptработает нормально, если я nohup ./testscript &работает нормально, если я ./testscript < /dev/null > /dev/null & он работает нормально (то же самое без перенаправления вывода).
Но если я сделаю ./testscript &, скрипт остановлен (и нет вывода):

[1]+  Stopped                 ./testscript

Из того, что я понимаю, это потому, что php ожидает ввода от STDIN. Но вопрос почему? Как вы можете видеть, в этом простом скрипте нет ничего требующего ввода, и у меня не было такого поведения на моем php5.4 в Debian. Это изменение в поведении происходит от версии php или ОС?
И почему так? Есть ли способ изменить это и позволить мне запускать скрипт в фоновом режиме, не добавляя / dev / null в качестве STDIN?

Спасибо !

0

Решение

Ваша программа ничего не делает, кроме печати чего-либо и завершения return 0 (конечно, вы не имеете в виду выход()?). После выполнения кода интерпретатору php больше нечего делать, и он просто сообщает оболочке: «Привет, приятель! Я готов! Ты можешь уведомить пользователя!» Называя это с & просто говорит оболочке: «Запустите эту команду в фоновом режиме». Который это делает. Ровно один раз.

Чтобы ваша программа работала бесконечно, она имеет на самом деле бежать бесконечно тоже.

<?php
while(true) {
// Doing something useful
sleep(5);
}
?>

В случае nohup «программа» (в данном случае интерпретатор php) в принципе запрещается прекратить — но это больше не даст. Что касается перенаправлений — они на самом деле будут нацелены на интерпретатор php, который будет ожидать дальнейшего ввода, который не приходит, потому что / dev / null ничего не излучает.

0

Другие решения

Других решений пока нет …