2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Запуск демона из-под PHP (модуль Apache)
Сообщение23.11.2013, 11:58 
Аватара пользователя
Народ, подскажите плиз корректный способ по сабжу. ОС - Линукс (Дебиан). Тупые непосредственные способы типа:
Код:
`command &`;
не проходят. Причём я не понял закономерности: То скрипт по завершении закрывает все дочерние процессы, в том числе, запущенные в фоновом режиме (т.е. демон "command" - не запущен). То скрипт не хочет завершаться (ждёт завершения дочернего процесса?), зато после нажатия в браузере кнопки "стоп" демон оказывается запущенным...

Дополнительные сведения о конфигурации PHP:
- Модуль "PCNTL" не установлен, т.е. функции pcntl_fork() нет.
- Модуль "pthreads" не установлен, т.е класса Thread тоже нет.

 
 
 
 Re: Запуск демона из-под PHP (модуль Apache)
Сообщение23.11.2013, 17:40 
Аватара пользователя
Дальнейшие уточнения:
Модуль "pcntl" (который позволяет ветвить процессы), оказывается, есть в консольной версии PHP, но в модуле Apache его функции недоступны. Так что из консольной версии PHP мне как-то более или менее криво удалось запусть демон:
Код:
<?php
function shutdown($child_pid) {
   posix_kill($child_pid, SIGKILL);
}

$child_pid = pcntl_fork(); // Разветвляем процесс

if ($child_pid) { // Это ветка родительского процесса

    register_shutdown_function('shutdown', $child_pid);
      // Функция shutdown будет вызвана при завершении процесса
      // чтобы убить дочерний процесс после того, как он запустит демон
    sleep(1);
      // Даём дочернему процессу секунду на запуск демона
    exit;
}
      // А эта ветка выполняется только в дочернем процессе.

`setsid command &`;
      // Команда setsid отвязывает демон command от родителя:
      // дочернего процесса php, который его запустил
?>
Во-первых, как-то это кривовато: Нет гарантий, что за секунду дочерний процесс успеет запустить демон.
А во-вторых, проблема с запуском из-под Apache так и не решена...

 
 
 [ Сообщений: 2 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group