2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Запуск демона из-под PHP (модуль Apache)
Сообщение23.11.2013, 11:58 
Заслуженный участник
Аватара пользователя


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

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

 Профиль  
                  
 
 Re: Запуск демона из-под PHP (модуль Apache)
Сообщение23.11.2013, 17:40 
Заслуженный участник
Аватара пользователя


28/09/06
9211
Дальнейшие уточнения:
Модуль "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 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group