鍍金池/ 問(wèn)答/PHP/ 怎樣防止php網(wǎng)頁(yè)的處理進(jìn)程在頁(yè)面關(guān)閉后被中途kill掉?

怎樣防止php網(wǎng)頁(yè)的處理進(jìn)程在頁(yè)面關(guān)閉后被中途kill掉?

做了一個(gè)php頁(yè)面調(diào)用shell腳本執(zhí)行相關(guān)操作。
shell腳本執(zhí)行時(shí)間比較長(zhǎng)(1-2分鐘)且不能被同時(shí)調(diào)用。

為了防止不同人在不同地方用php頁(yè)面同時(shí)調(diào)用shell腳本。所以在調(diào)用shell腳本前用php做了一個(gè)文件鎖,在shell腳本執(zhí)行完成之后解鎖。

但是若用戶點(diǎn)擊php頁(yè)面后馬上又關(guān)閉,可能造成以下問(wèn)題:文件被鎖之后,shell腳本還未執(zhí)行完,php處理進(jìn)程就被kill掉了,然后文件未被解鎖,php頁(yè)面無(wú)法在調(diào)用shell腳本。

這樣才能防止以上的php進(jìn)程被kill掉,從而保證上鎖的文件最后被解鎖。

回答
編輯回答
使勁操

php.ini

ignore_user_abort boolean
默認(rèn)值為 FALSE 。 如果設(shè)置為 TRUE ,在客戶端斷開(kāi)連接后,腳本不會(huì)被中止。
http://php.net/manual/zh/misc...

function

int ignore_user_abort ([ bool $value ] )
設(shè)置客戶端斷開(kāi)連接時(shí)是否中斷腳本的執(zhí)行

http://www.php.net/manual/zh/...

2017年8月11日 03:18
編輯回答
夢(mèng)若殤

你在瀏覽器上關(guān)閉頁(yè)面應(yīng)該不會(huì)影響你的PHP進(jìn)程啊。

PHP腳本調(diào)用shell一般是要阻塞的,如果頁(yè)面被返回(響應(yīng)到了客戶端),php就已經(jīng)完成了請(qǐng)求的處理,php腳本執(zhí)行到了exit或者結(jié)尾。如果shell不阻塞的話,貌似也會(huì)放鎖。

如果說(shuō)用戶請(qǐng)求php,但是沒(méi)有等到響應(yīng)就關(guān)閉,也應(yīng)該不會(huì)影響到服務(wù)端PHP的執(zhí)行。如果你發(fā)現(xiàn)文件鎖解不掉就只能靠try...catch...finally了

2017年5月22日 05:39