Я использую pcntl_fork для запуска дочернего процесса для отправки электронной почты через SMTP.
Дочерний процесс использует пакет PEAR Mail для отправки электронной почты, но проблема в том, что если удаленный сервер не отвечает, процесс просто работает вечно, ожидая ответа, независимо от любого ограничения по времени, установленного в php.ini.
Чтобы обойти это, я использую функцию pcntl_alarm для запуска функции через 30 секунд, которая убивает дочерний процесс, если он все еще работает.
function handlesig($sig) {
global $pid,$node,$resend;
posix_kill($pid,SIGKILL);
mysql_query("insert into log (event) values ('Timed out!')");
}
Когда я убиваю дочерний процесс, в системе остается несуществующий процесс.
Есть ли другой сигнал, который я должен использовать, который все равно заставит дочерний процесс умереть, не дожидаясь соединения (потому что соединение никогда не завершится) и избежать создания несуществующих процессов?