打破在后台运行的PHP脚本的无限循环[不杀死进程]

时间:2015-02-08 14:11:02

标签: php

我有一个PHP脚本,它将在具有无限循环的VPS上全天候运行,但问题是如何在需要时按顺序打破php脚本中的无限循环以使脚本正确存在?

我知道我可以杀死进程,但如果我杀了,那么脚本会立即停止 并且我的循环大小非常大,如果在杀死进程的时候执行是在循环中间的某个地方,那么循环的剩余一半将不会被执行并且它将产生错误。我循环后也有一些代码,所以如果进程被杀死那么代码就不会被执行。

所以我的问题是如何打破在后台运行的PHP脚本的无限循环,而不会杀死进程?

3 个答案:

答案 0 :(得分:1)

而不是:

while(true) {

执行:

while(!file_exists("KILL")) {

然后,当您想要终止脚本时,只需创建KILL文件即可。你可以通过一个只为你创建该文件的kill.php脚本来让自己更容易,所以你不必记住要做什么。

就个人而言,我发现PHP脚本更容易与EXE一起用于控制台应用程序,但这只是意见。

答案 1 :(得分:0)

Q1。 Windows任务计划程序..不要插入任何循环,只需插入CGI目录,然后创建时间。

Q2。如果你问我,PHP会更好。

但是,它不是关于性能的。

答案 2 :(得分:0)

听起来像是在对服务器进行编码,看看这个,希望它有所帮助。

<?php
class ServerManager
{
    private $serverState;

    public function process()
    {
        if(!$this->getServerState())
        {
            return;
        }

        $this->processNewConnections();
        $this->processExistingConnections();
    }

    public function setServerState($state)
    {
        $this->serverState = $state;
    }
    public function getServerState()
    {
        return $this->serverState;
    }

    private function processNewConnections()
    {
        ...
    }

    private function processExistingConnections()
    {
        ...
        if(connected client has requested that the server should stop)
        {
            $this->setServerState(false);
        }
        ...
    }
}