需求是這樣的,維護(hù)一個(gè)老版本的yii2框架中的進(jìn)程管理器,需要加入超時(shí)kill和重試邏輯。但是看了部分文檔,現(xiàn)在了解到alerm信號(hào)可以實(shí)現(xiàn)超時(shí)關(guān)閉,但是只能實(shí)現(xiàn)的是work進(jìn)程自己發(fā)自己接受,有沒(méi)有辦法放到master進(jìn)程進(jìn)行超時(shí)管理?
今天有了解可以使用通道實(shí)現(xiàn)進(jìn)程間的通信。具體的使用我的理解是創(chuàng)建個(gè)文件往里面寫時(shí)間和超時(shí)時(shí)間,master取數(shù)據(jù)進(jìn)行判斷,然后kill掉子進(jìn)程。
根據(jù)管道方法的話,現(xiàn)在有疑問(wèn)如下:
(1)比如一個(gè)master,5個(gè)worker的情況下,文件需要?jiǎng)?chuàng)建幾個(gè)?
(2)進(jìn)程重啟或者關(guān)閉后,文件是不是需要?jiǎng)h除掉?
(3)管道的文件格式是只能用.pip結(jié)尾的么?里面的數(shù)據(jù)格式有什么需要注意的?
(4)有沒(méi)有前輩探索過(guò)并且寫過(guò)相關(guān)demo的,有個(gè)文章能看最好了。
worker進(jìn)程一般是常駐進(jìn)程,一般來(lái)說(shuō)是不用判斷worker進(jìn)程是否超時(shí)的,而是判斷客戶端連接上來(lái)的進(jìn)程 connection 是否超時(shí),一般這個(gè)是通過(guò)心跳包來(lái)實(shí)現(xiàn)的,如果客戶端沒(méi)有按照約定的時(shí)間間隔發(fā)送心跳包,則斷開客戶端的連接。
如果你是真的要求master下的每個(gè)worker進(jìn)程都要有存活的時(shí)間限制,那么master進(jìn)程里面得到存儲(chǔ)的worker進(jìn)程的pid,然后直接殺死就好了,不過(guò)worker進(jìn)程殺死口,豈不是master進(jìn)程下什么都沒(méi)有了,那按照你的業(yè)務(wù)需求是不是master進(jìn)程也要退出
你寫的問(wèn)題描述不太清楚,所以也不好給你提供什么解決方案。
如果你只是問(wèn)進(jìn)程間通訊的技術(shù)的話,你可用搜索php相關(guān)的共享內(nèi)存,信號(hào)量,消息隊(duì)列,匿名管道和socket 等資料