Как правильно выйти из дочернего процесса (php.core & pcntl_fork, pcntl_alarm)

Pilsen

Новичок
Как правильно выйти из дочернего процесса (php.core & pcntl_fork, pcntl_alarm)

После порождения дочернего процесса (pcntl_fork) я создаю внутри него (в самом начале) обработчик SIGALRM

PHP:
  declare(ticks=1);   
pcntl_signal(SIGALRM, "signal_handler", true);   
pcntl_alarm($exec_time);
и внутри обработчика signal_handler вызываю exit(0);

Другими словам, если дочерний процесс не завершился сам - я завершаю его вызовом exit.

При этом, один из десяти дочерних процессов "валится в корку".

Дочерний процесс ждет ответа от удаленного сервера, потому длительные задержки вполне резонны.

Подскажите, как правильно завершать дочернего,что бы не валился в php.core?
Я надеялся, что вызов exit подчистит память и завершит процесс "как полагается".
 

fixxxer

К.О.
Партнер клуба
а зачем такие сложности? по обычному sigterm, без кастомных обработчиков, дочерний процесс не завершается?
 

Pilsen

Новичок
предлагаете просто слать ему sigterm?

-~{}~ 10.12.09 16:02:

возможно, это что-то изменит.. я просто не могу найти способ это сделать. подскажите

-~{}~ 10.12.09 16:12:

А, возможно, я неправильно пояснил...

Дочерний процесс часто подвисает при скачивании некоторых файлов. Я могу, конечно, это фильтровать на уровне на уровне http_request2 , но пока мне нужен железный способ, что бы процесс всегда завершался, если он не успел отработать за пару минут. Ничего лучше, чем pcntl_alarm я не смог придумать

-~{}~ 10.12.09 16:17:

posix_kill(posix_getpid(), SIGTERM);

будет лучше, чем просто exit?
 

fixxxer

К.О.
Партнер клуба
ага попробуй так.

если будет на таком виснуть или не обрабатывать - нужно уже думать (возможно по таймауту sigkill?)

а если и так корка - нужен backtrace.
 
Сверху