我正在使用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!')"); }
当我杀死子进程时,虽然我在系统上留下了一个已经失效的进程.
是否有一个不同的信号我应该使用它仍然会迫使子进程死而不等待连接(因为连接永远不会完成)并避免建立已失效的进程?
您需要如上所述等待它,或者使用
posix_setsid使子进程与父进程分离
原文链接:/php/134990.html