Я использую 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!')");
}
Когда я убиваю дочерний процесс, я остаюсь с несуществующим процессом в системе.
Есть ли другой сигнал, который я должен использовать, который все равно заставит дочерний процесс умереть, не дожидаясь соединения (потому что соединение никогда не завершится), и избежать создания несуществующих процессов?