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

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

WBOY
WBOYOriginal
2016-06-06 20:07:361834Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn