如果我kill PHP的进程
PHP的进程是否会执行 __destruct()析构函数?
对PHP的生命周期起到什么影响?
我觉得linux KILL的话,已经脱离了PHP的掌控了,跟PHP生命周期已经没有关系了,是这样理解么?
如果这样,那PHP进程占用的内存是谁来维护?
另:如果我的需求是:通知PHP进程结束(比如PHP当前是个死循环),让PHP自己完成生命周期,要怎么处理?
如果我kill PHP的进程
PHP的进程是否会执行 __destruct()析构函数?
对PHP的生命周期起到什么影响?
我觉得linux KILL的话,已经脱离了PHP的掌控了,跟PHP生命周期已经没有关系了,是这样理解么?
如果这样,那PHP进程占用的内存是谁来维护?
另:如果我的需求是:通知PHP进程结束(比如PHP当前是个死循环),让PHP自己完成生命周期,要怎么处理?
另:如果我的需求是:通知PHP进程结束(比如PHP当前是个死循环),让PHP自己完成生命周期,要怎么处理?
解决方法
开始时间 = 当前时间
生命周期时间 = 300
while(ture)
{
if (当前时间 - 开始时间) >=300
退出
else
执行业务逻辑
}
不满足题主需求~静待高明
题主如果是想控制php的死循环,不想用命令行,也不想用信号,那么通过“配置”也是可以做到的,配置可以是文件,可以数据库存储的值,相当于开关:
开始时间 = 当前时间
生命周期时间 = 300
while(ture)
{
if task.lock 不存在
退出
else
执行业务逻辑
}
题外话:其实这种循环是可控的,不是真正的死循环,就算是真正的死循环可能也是有作用的(如事件循环),如果无法控制的死循环,意外造成的死循环,那才是真正的BUG,所以以前学校老师说:“不要写出死循环代码,那是最严重的BUG,会消耗完机器内存”,那句话其实不严谨!
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
类似在windows下强制结束进程,会提示你丢失有关数据,因为进程在不知情的情况下被突然结束,不能有效处理善后。
kill 进程已经不在PHP的管理范围了,这个是系统层面的了。
所以析构函数也不会执行,因为执行的前提是PHP主动触发,现在PHP都没了。
kill前是根据配置申请内存,php自己维护、回收。kill之后的内存释放当然是属于linux维护了,即使剩余僵尸进程,也是系统管理。
通知PHP进程结束,可以试试信号,fpm自带信号处理,restart、stop等。