我有一个 PHP 脚本,它使用system()
调用来执行其他(可能长时间运行的)程序(感兴趣:NCBI BLAST、phrap、primer3 和其他用于进行 DNA 序列分析和组装的程序)。
我在 Windows XP 下运行,在命令提示符下使用 PHP 的 CLI 版本,或者作为服务运行。(无论哪种情况,我都通过数据库表中的任务队列与它通信)。
在 PHP4 下:当我点击Ctrl+时C,脚本停止并且当时运行的任何子进程也停止。在 PHP5 下:当我点击Ctrl+时C,脚本停止,但孩子仍在运行。
同样,当将脚本作为服务运行时,使用 PHP4 运行时停止服务会停止子进程,而使用 PHP5 时子进程会继续运行。
我尝试编写一个最小的测试应用程序,并发现了相同的行为。测试 PHP 脚本仅使用 system() 执行 C 程序(仅休眠 30 秒),然后等待按键被按下。
我查看了 PHP 4.4.9 和 5.2.6 的源代码,但在 system() 代码中没有发现它们会导致这种情况的差异。我还快速查看了 CLI 应用程序的启动代码,并没有发现信号处理方面的任何差异。
任何可能导致此问题或解决方法的提示将不胜感激。
谢谢。