4
A
回答
2
一般来说,php并没有实现线程。
但有一个ZF-类可能是适合你:
http://framework.zend.com/manual/en/zendx.console.process.unix.overview.html
ZendX_Console_Process_Unix允许 开发商产卵一个对象作为新 过程等做在 多个任务在控制台环境中并行。 通过其特定的性质,它是 只能在基于nix的系统 像Linux,Solaris,Mac/OSx等。 此外,运行此 组件需要shmop_,pcntl_ *和 posix_ *模块。如果其中一个 要求未得到满足,则在实例化 组件后它将抛出 例外。
合适的例子:
class MyProcess extends ZendX_Console_Process_Unix
{
protected function _run()
{
// doing pdf and flash stuff
}
}
$process1 = new MyProcess();
$process1->start();
while ($process1->isRunning()) {
sleep(1);
}
echo 'Process completed';
。
-1
如果您在命令行中运行它,您可以派生使用pcntl_fork
也有守护类,会做同样的伎俩一个PHP的过程:
http://pear.php.net/package/System_Daemon
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
//We are the parent, exit
exit();
} else {
// We are the child, do something interesting then call the script at the end.
}
0
尝试使用popen()而不是exec()。
这种黑客行为可以在任何标准PHP安装上工作,即使在Windows上也不需要额外的库。呦不能真正控制过程的各个方面,你酿出这种方式,但有时这是不够的:
$p1 = popen("/bin/bash ./some_shell_script.sh argument_1","r");
$p2 = popen("/bin/bash ./some_other_shell_script.sh argument_2","r");
$p2 = popen("/bin/bash ./yet_other_shell_script.sh argument_3","r");
三个催生的shell脚本将同时运行,只要你不要做一个函数,pclose( $ p1)(或$ p2或$ p3)或尝试从这些管道中读取数据,它们不会阻止您的PHP执行。
当您完成其他任务(您正在使用PHP脚本执行的任务)时,您可以在管道上调用pclose(),这将暂停脚本执行,直到您正在执行的进程完成。然后你的脚本可以做别的事情。
请注意,在这些脚本完成之前,您的PHP不会结束或死()。到达脚本的末尾或调用die()将使其等待。
相关问题
- 1. 从python脚本内启动python脚本作为后台进程
- 2. 无法启动PHP后台脚本
- 3. 启动脚本在后台
- 4. 启动后台进程从shell脚本,然后带回前台后
- 5. PHP脚本404完成后
- 6. 如何运行本身启动两个后台进程的后台shell脚本?
- 7. 启动后台进程
- 8. grep启动后台进程
- 9. 根据后台进程启动进程
- 10. 脚本完成后如何保持过程后台?
- 11. 需要重新启动失败的后台进程Shell脚本
- 12. 在后台启动进程并从bash脚本中修改
- 13. Android应用程序在完成活动后进入后台
- 14. Perl:等待后台进程完成
- 15. 无法启动后台进程在Windows中运行PHP脚本IIS服务器
- 16. PHP后台进程
- 17. PHP后台进程
- 18. PHP后台进程
- 19. php在后台重启进程spamassassin
- 20. PHP脚本完成后删除文件
- 21. 后台自动完成
- 22. C# - 在后台启动进程
- 23. 安静地在后台启动进程
- 24. 退出与后台进程shell脚本
- 25. ruby脚本中的后台进程heroku
- 26. pidof从另一个后台进程的后台脚本
- 27. 上传完成后移动脚本
- 28. Bash脚本 - 启动两个后台进程,等待两个完成并在变量中获得输出
- 29. PHP中的后台脚本?
请提供downvote的反馈意见。 – 2010-03-10 04:34:30
对不起,这是一个意外。我已经标记了它。 – Cetra 2010-03-11 04:07:53
感谢这看起来非常好,但如果有Windows支持也会很好.. – Chris 2010-03-22 09:28:27