Heim  >  Artikel  >  Backend-Entwicklung  >  用PHP写daemon无法驻留的问题

用PHP写daemon无法驻留的问题

WBOY
WBOYOriginal
2016-06-06 20:47:44949Durchsuche

比如下面这样一个文件test.php

<code><?php echo exec("nohup sleep 20 > /dev/null 2>&1 & echo $!");
?>
</code>

在终端下执行php test.php可以将进程留在后台
但是通过浏览器访问test.php的时候,不能在后台留下进程

猜测可能是web进程中止同时把sleep也给中止了,要想一直留着,有什么好的解决方法吗?

回复内容:

比如下面这样一个文件test.php

<code><?php echo exec("nohup sleep 20 > /dev/null 2>&1 & echo $!");
?>
</code>

在终端下执行php test.php可以将进程留在后台
但是通过浏览器访问test.php的时候,不能在后台留下进程

猜测可能是web进程中止同时把sleep也给中止了,要想一直留着,有什么好的解决方法吗?

用swoole扩展写个PHP socket server,作为守护进程运行。

试试php的这个函数 ignore_user_abort 具体用法参考http://cn2.php.net/manual/en/function.ignore-user-abort.php

应该都在这了:
http://www.php.net/manual/en/features.connection-handling.php

基本上:

  1. 默认 如果远程客户端断掉连接, 则脚本中止. 通过ignore_user_abort(php.ini), ignore_user_abort(Apache httpd.conf), 或者调用 ignore_user_abort() 函数改变默认设定;

  2. 默认 脚本最大运行时间为 30秒. 可以通过 max_execution_time(php.ini), max_execution_time(Apache httpd.conf) 或调用set_time_limit()函数修改.

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