如果我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自己完成生命週期,要怎麼處理?
類似在windows下強制結束進程,會提示你丟失有關資料,因為進程在不知情的情況下被突然結束,不能有效處理善後。
kill 進程已經不在PHP的管理範圍了,這個是系統層面的了。
所以解構函式也不會執行,因為執行的前提是PHP主動觸發,現在PHP都沒了。
kill前是根據配置申請記憶體,php自己維護、回收。kill之後的記憶體釋放當然是屬於linux維護了,即使剩餘殭屍進程,也是系統管理。
通知PHP進程結束,可以試試訊號,fpm內建訊號處理,restart、stop等。
通常不會,php代碼通常都不會去捕獲kill發送的訊號。
而且我也不確定php是不是有能力捕獲。
另:如果我的需求是:通知PHP進程結束(比如PHP當前是個死迴圈),讓PHP自己完成生命週期,要怎麼處理?
解決方案
開始時間 = 目前時間生命週期時間 = 300while(ture){ if (目前時間 - 開始時間) >=300 退出 else 執行商務邏輯}
不滿足題主需求~靜待高明
KILL一個進程,進程的記憶體當然由作業系統回收
如果你有訊號捕獲的需求,請看PHP的PCNTL擴充