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

WBOY
Freigeben: 2016-06-06 20:07:36
Original
1822 Leute haben es durchsucht

我在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>
Nach dem Login kopieren
Nach dem Login kopieren

<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>
Nach dem Login kopieren
Nach dem Login kopieren

在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>
Nach dem Login kopieren
Nach dem Login kopieren

<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>
Nach dem Login kopieren
Nach dem Login kopieren

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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage