gpt4 book ai didi

php - 为什么 php 在 setitimer 中使用 ITIMER_PROF 而不是 ITIMER_REAL?

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:03 24 4
gpt4 key购买 nike

Linux下PHP通过setitimer中的ITIMER_PROF来实现ini(max_execution_time)和set_time_limit,而不是ITIMER_REAL。通过谷歌,我在 php.net 中找到了一个关于这个问题的帖子 https://bugs.php.net/bug.php?id=65596 .相关PHP手册http://php.net/manual/en/function.set-time-limit.php注意

The set_time_limit() function and the configuration directive max_execution_time only affect the execution time of the script itself. Any time spent on activity that happens outside the execution of the script such as system calls using system(), stream operations, database queries, etc. is not included when determining the maximum time that the script has been running. This is not true on Windows where the measured time is real. PHP seems designed to use ITIMER_PROF.

我想知道为什么 PHP 超时机制是这样设计的,如果我在 Zend/zend_execute_API.c 中将 ITIMER_PROF 更改为 ITIMER_REAL,会出现什么副作用?

最佳答案

他们这样做是为了便携。

ITIMER_REAL 由于 ITIMER_REAL 发送了一个 SIGALRM 信号而不是 SIGVALRMSIGPROF 信号。

我认为副作用是脚本过早终止和与某些 SAPI(例如 Apache + mod_php)不兼容。

有些 unices 还在 sleep(2) 上使用 SIGALRM,php 的 sleep() 函数使用了它,所以这会是另一个副作用。

关于php - 为什么 php 在 setitimer 中使用 ITIMER_PROF 而不是 ITIMER_REAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com