php中popen之后一直等待脚本执行完毕才向下执行,如何解决?
程序员文章站
2022-05-02 09:21:00
...
我在PHP中,使用了pclose(popen())之后,一直等待popen运行的脚本运行完成才继续向下执行。
//test.php
pclose(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.php
sleep(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.php
pclose(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.php
sleep(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))
会阻塞到获取排它锁.
上一篇: PHP 表单传递参数与获取参数问题
下一篇: php接口的使用实例函数