Linux (Max_execution_time)和set_time_limit是通过在setitimer中使用ITIMER_PROF实现的,而不是ITIMER_REAL。通过谷歌,我在php.net上找到了一条关于https://bugs.php.net/bug.php?id=65596这个问题的帖子。与PHP手册http://php.net/manual/en/function.set-time-limit.php说明有关
set_time_limit()函数和配置指令max_execution_time只影响脚本本身的执行时间。在确定脚本运行的最大时间时,不包括在脚本执行之外发生的任何活动,例如使用system()、流操作、数据库查询等的系统调用。在测量到的时间是真实的Windows上,这不是真的。PHP似乎是为使用ITIMER_PROF而设计的。
我想知道为什么PHP机制是以的方式设计的,如果我在zend/zend_API.c中将ITIMER_PROF改为ITIMER_REAL,那么会出现什么副作用呢?
发布于 2014-08-16 11:05:02
他们这样做是为了便于携带。
由于ITIMER_REAL发送SIGALRM信号而不是SIGVALRM或SIGPROF信号,一些SAPI和SIGPROF中断了。
我认为副作用是不成熟的脚本终止和与一些SAPI(如Apache + mod_php )的不兼容。
一些unices还在SIGALRM (2)上使用SIGALRM(2),而php的that ()函数使用SIGALRM函数,这将是另一个副作用。
https://stackoverflow.com/questions/21836971
复制相似问题