启动命令后访问服务器进程

Access to a server process after start command

我想创建一个 php 服务器。 我发出了异步启动服务器的命令。 我想下订单停止服务器。 我在 运行 启动命令后无法获取进程。

运行 命令

$server = new Server();
$pid = pcntl_fork();
if ($pid > 0) {
    echo "Server Runned";
    return;
}
$server->Run();

服务器Class

class Server {
    private $_loop;
    private $_socket;

    public function __construct() {
        $this->_loop = Factory::create();
        $this->_socket = new ReactServer($this->_loop );
        $this->_socket->on(
            'connection',function ($conn) {
                echo "Connection";
            } 
        );
    }

    public static function Stop () {
        $this->_loop-> stop();
    }
    public function Run () {
        $this->_loop->run();
    }
}

感谢您的帮助!

我的问题都解决了。

当我启动我的服务器时,我在系统的 tmp 目录中创建了一个文件。 在我的循环中,我检查这个文件是否已经存在。如果它被删除,我将停止循环。

所以,要停止我的服务器,我可以删除文件。

为了可以打开不同的服务器,我用主机和端口命名它(例如:~/127-0-0-1-8080.pid)。

class Loop
{
    private $lockFile;

    public static function getLockFile($address)
    {
        return sys_get_temp_dir().'/'.strtr($address, '.:', '--').'.pid';
    }

    public function __construct($address)
    {
        $this->lockFile = Loop::getLockFile($address);
        touch($this->lockFile);
        //...
    }
    public function run()
    {
        $this->running = true;
        while ($this->running) {

            if (!file_exists($this->lockFile)) {
                $this->running = false;
                echo "File Removed";
            }
            //...
        }
    }
    public function stop()
    {
        $this->running = false;
        unlink($this->lockFile);
    }

}

启动命令:

$server = new Server($em, $port, $host);
$pid = pcntl_fork();
if ($pid > 0) {
   $address = $host.":".$port;
   echo "Server Starting " . $adresse;
}
$server->Run();

停止命令:

$host = '127.0.0.1';
$port = 5821;
$lockFile = Loop::getLockFile($host.":".$port);
unlink($lockFile);
echo "Server Stopped";