Я нашел много контента в Интернете о запуске php-кода в фоновом режиме, но я не могу воссоздать сценарий на своей машине. Вот мой код:PHP shel_exec не работает в фоновом режиме
//call.php
function run_background()
{
$PID = shell_exec("nohup php teste.php &");
return $PID;
}
function checking_process($pid)
{
exec("ps $pid", $state);
return (count($state) >= 2);
}
$ps = run_background();
copy("yel", "temp/yel2");
При запуске файла call.php, страница загружается, пока файл test.php не запускать. Это файл для тестирования:
//test.php
for($i=1; $i<=5; $i++)
{
sleep(1);
}
copy("yel", "temp/yel");
В обоих файлах я использую функцию копирования, чтобы проверить время выполнения действий. В этот момент я ожидал бы, что в качестве файла test.php в этом фоне и потребуется не менее 5 секунд, поток файла call.php должен произойти независимо, но файл «yel2» создается только после файла «yel». Однако функция фактически не работает в фоновом режиме, что делает ошибку?
Примечание: Я использую 64bits Manjaro Linux, PHP 5.5 и Apache 2.4
Примечание 2: $ PID возвращается из функции run_background является действительным, я могу ясно найти его с помощью команды 'пс Окс'
О, это работает. Я уже видел некоторые примеры с добавлением «dev/null», но не таким образом. Я также выяснил, что то, что предотвратило работу кода, было массивом символов. В этом примере я нашел в интернете «nohup teste.php 2>/dev/null & echo $!», Просто измените «2>» на «> 2», и код работает так, как должен, я думаю, что это может повлиять что-то и показывает, что я изучаю больше сценариев оболочки. В любом случае, спасибо вам большое, я нашел более чистый и понятный ответ –