>  기사  >  백엔드 개발  >  php中popen之后一直等待脚本执行完毕才向下执行,如何解决?

php中popen之后一直等待脚本执行完毕才向下执行,如何解决?

WBOY
WBOY원래의
2016-06-06 20:07:361823검색

我在PHP中,使用了pclose(popen())之后,一直等待popen运行的脚本运行完成才继续向下执行。

<code>//test.php
pclose(popen('php '.__DIR__.'/index.php','r'));
$fp = fopen('product.txt', 'cb');
if(flock($fp, LOCK_EX | LOCK_NB)){
    echo "ok<br>";
}else{
    echo "no<br>";
}
fclose($fp);

</code>

<code>//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);</code>

在test.php中第2行代码一直等到index.php执行完毕才开始运行,请问这是为什么

回复内容:

我在PHP中,使用了pclose(popen())之后,一直等待popen运行的脚本运行完成才继续向下执行。

<code>//test.php
pclose(popen('php '.__DIR__.'/index.php','r'));
$fp = fopen('product.txt', 'cb');
if(flock($fp, LOCK_EX | LOCK_NB)){
    echo "ok<br>";
}else{
    echo "no<br>";
}
fclose($fp);

</code>

<code>//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);</code>

在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)) 会阻塞到获取排它锁.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.