Как сделать fork в PHP?

Всем доброго времени суток.

Возникла следующая проблема:
Необходимо реализовать возможность запуска сторонних программ через PHP. Программы эти довольно ресурсоёмкие, следовательно, должны выполняться в фоне.

pcntl не подходит, так как PHP не должен выполняться через CGI.

На ум пришла следующая идея: пишется программа на C, которая принимает в качестве параметра путь к программе, которая должна быть выполнена, делает fork и запускает её.

Из PHP эта программа вызывается функцией exec:
$cmd = "sudo -u aleksey run_script ".$a['path'];
exec($cmd);


Исходник run_script:
#include <unistd.h>
int main(int argc, char *argv[])
{
	pid_t pid;
	pid = fork();
	if (pid == 0) {
		execl(argv[1], NULL);
	}
	else
		return 0;
}


Вроде PHP не должен ждать завершения выполнения программы, путь к которой передаётся в argv[1]. Но на деле всё не так. С таким же успехом я мог бы просто вызвать exec с нужным путём.

ОС Debian, apache+php5.4.4

Собственно, вопрос: что я делаю не так?
  • Вопрос задан
  • 3104 просмотра
Решения вопроса 1
ScorpLeX
@ScorpLeX
Судя по описанию вам нужен не форк, а просто запуск скрипта.
exec('php script.php > /dev/null &');
Эта конструкция переведет вывод скрипта в dev/null, соответственно ожидания не будет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы