Всем доброго времени суток.
Возникла следующая проблема:
Необходимо реализовать возможность запуска сторонних программ через 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
Собственно, вопрос: что я делаю не так?