Запуск процессов-демонов

Drakon

Новичок
Запуск процессов-демонов

Как запустить несколько процессов в фоновом режиме из PHP скрипта таким образом, чтобы когда PHP скрипт заканчивет работу, то эти процессы тоже заканчивали работу?
 

mity

Новичок
Конечно можно регистрировать функцию завершения register_shutdown_function() и вней завершать дочерние процессы, но при "определённом закрытии" скрипта эта функция не выполняется.

Для гарантированого завершения дочерних процесов можно применить 2 методики.

1) Основной скрипт создаёт временный файл и записывает туда текущее время, с интервалом не более 10 сек. Дочерние скрипты проверяют сравнивают текущее время с временем записаном в файле и если разница превышает 20 секунд то завершают свою работу.

2) Если нет возможности модифицировать дочерние скрипты, то
Основной процесс, создаёт временный файл и лочит его flock($h,LOCK_EX).
Основной процесс, запускает супервизор, написаный на том же php.
Супервизор запускает дочерние процессы proc_open(), получает их id.
Супервизор раз в секунду пытается залочить временный файл, @flock($h,LOCK_EX+LOCK_NB). Если залочить удалось то суперизор завершает дочерние скрипты proc_terminate()
 

Drakon

Новичок
Оказывается, если запускать процессы не в демоне (т. е. без " & " в конце команды) при помощи proc_open, то при завершении родительского процесса все дочерние закрываются. Всё решилось само собой.
И если для дочерних процессов создавать пайпы в качестве потоков ввода, вывода и ошибок, то они рабоают параллельно с родительским, что и требовалось.

-~{}~ 22.04.10 01:50:

Один из процессов-демонов может случайно умереть... Какой самый простой способ узнать об этом? И как получить уведомление о том, что процесс умер? Или это надо обязательно создавать супервизора, который будет за всем следить?
 

mity

Новичок
Периодически опрашивать все дочерние процессы proc_get_status.
Например из основного скрипта
 
Сверху