2016-03-17 6 views
2

Я нашел много контента в Интернете о запуске 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 является действительным, я могу ясно найти его с помощью команды 'пс Окс'

ответ

0

Вместо того, чтобы просто добавлять & в конце, попробуйте добавить >& /dev/null &, это то, с чем я имел успех. Так получилось бы что-то вроде этого:

$PID = shell_exec("nohup php teste.php >& /dev/null &"); 
+0

О, это работает. Я уже видел некоторые примеры с добавлением «dev/null», но не таким образом. Я также выяснил, что то, что предотвратило работу кода, было массивом символов. В этом примере я нашел в интернете «nohup teste.php 2>/dev/null & echo $!», Просто измените «2>» на «> 2», и код работает так, как должен, я думаю, что это может повлиять что-то и показывает, что я изучаю больше сценариев оболочки. В любом случае, спасибо вам большое, я нашел более чистый и понятный ответ –

Смежные вопросы