我在PHP中,使用了pclose(popen())之後,一直等待popen啟動並執行指令碼運行完成才繼續向下執行。
//test.phppclose(popen('php '.__DIR__.'/index.php','r'));$fp = fopen('product.txt', 'cb');if(flock($fp, LOCK_EX | LOCK_NB)){ echo "ok
";}else{ echo "no
";}fclose($fp);
//index.phpsleep(10);set_time_limit(0);$fp = fopen('product.txt', 'cb');flock($fp, LOCK_EX | LOCK_NB);for($i = 10 ; $i ;$i--){ fwrite($fp,$i."\n"); sleep(6);}fclose($fp);
在test.php中第2行代碼一直等到index.php執行完畢才開始運行,請問這是為什麼
回複內容:
我在PHP中,使用了pclose(popen())之後,一直等待popen啟動並執行指令碼運行完成才繼續向下執行。
//test.phppclose(popen('php '.__DIR__.'/index.php','r'));$fp = fopen('product.txt', 'cb');if(flock($fp, LOCK_EX | LOCK_NB)){ echo "ok
";}else{ echo "no
";}fclose($fp);
//index.phpsleep(10);set_time_limit(0);$fp = fopen('product.txt', 'cb');flock($fp, LOCK_EX | LOCK_NB);for($i = 10 ; $i ;$i--){ fwrite($fp,$i."\n"); sleep(6);}fclose($fp);
在test.php中第2行代碼一直等到index.php執行完畢才開始運行,請問這是為什麼
pclose(popen('nohup ' . $cmd . ' & 2>&1', 'r'));
pclose(popen('php /path/to/task.php &', 'r'));
其中&表示放入後台執行指令碼task.php.
另外注意,if(flock($fp,LOCK_EX))
會阻塞到擷取排它鎖.