Команда php exec (или аналогичная), чтобы не дождаться результата

У меня есть команда, которую я хочу запустить, но я не хочу, чтобы PHP сидел и дождался результата.

<?php echo "Starting Script"; exec('run_baby_run'); echo "Thanks, Script is running in background"; ?> 

Возможно ли, чтобы PHP не дождался результата. То есть просто отпустите его и перейдите к следующей команде.

Я не могу найти что-нибудь и не уверен, что это возможно. Лучшее, что я мог найти, это тот, кто запустил работу CRON, чтобы начать через минуту.

Всегда хорошо проверять документацию :

Чтобы выполнить команду, если она не повесила ваш php-скрипт во время ее запуска, запущенная вами программа не должна выводиться обратно на php. Для этого переадресуйте как stdout, так и stderr в / dev / null, а затем запустите его.

> /dev/null 2>&1 &

Чтобы выполнить команду и она порождена как другой процесс, который не зависит от потока apache, чтобы продолжать работать (не умрет, если кто-то отменяет страницу), запустите это:

exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"');

Вы можете запустить команду в фоновом режиме, добавив & в конце ее как:

 exec('run_baby_run &'); 

Но выполнение этого только повесит ваш скрипт, потому что:

Если программа запускается с функцией exec, чтобы она продолжала работать в фоновом режиме, вывод программы должен быть перенаправлен в файл или другой выходной поток. В противном случае PHP зависнет до завершения программы.

Таким образом, вы можете перенаправить команду stdout команды в файл, если вы хотите увидеть ее позже или в /dev/null если вы хотите отменить ее как:

 exec('run_baby_run > /dev/null &'); 

Хорошо, вот окончательный окончательный правильный удостоенный наград ответ 😉

Это использует wget для уведомления URL-адреса чего-либо, не ожидая.

 $command = 'wget -qO- http://test.com/data=data'; exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid); 

Это использует ls для обновления журнала без ожидания.

 $command = 'ls -la > content.log'; exec('nohup ' . $command . ' >> /dev/null 2>&1 & echo $!', $pid); 

"exec nohup setsid your_command"

nohup позволяет вашей команде продолжать, даже если запущенный процесс может завершиться первым. Если это произойдет, сигнал SIGNUP будет отправлен в команду your_command, что приведет к ее завершению (если только он не поймает этот сигнал и не проигнорирует его).