gpt4 book ai didi

php - 基于ZMQContext的$ socket-> send()之后,php进程永不消亡,如何解决?

转载 作者:行者123 更新时间:2023-12-02 18:53:45 25 4
gpt4 key购买 nike

我需要包含php脚本的docker容器在临死前通过Web套接字发送消息,但是该过程永远不会停止(即使在exitdiethrow新异常之后)。

如果该过程永远不会停止,那么容器也永远不会停止...

我举了一个例子来说明我的问题:

test.php :

<?php
echo "begin\n";

$dsn = 'tcp://127.0.0.1:5555';
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_REQ);
$socket->connect($dsn);
$socket->send("test", ZMQ::MODE_DONTWAIT); // this line cause the zombie process
$socket->disconnect($dsn);

echo "end\n";

Dockerfile :
FROM php:7.2.4-cli-alpine3.7

# PHPIZE
ENV PHPIZE_DEPS \
autoconf \
cmake \
file \
g++ \
gcc \
libc-dev \
pcre-dev \
make \
git \
pkgconf \
re2c \
zlib-dev \
icu-dev
RUN set -xe \
&& apk add --update icu \
&& apk add --no-cache --virtual .build-deps $PHPIZE_DEPS

# Module ZMQ
RUN apk add --no-cache --virtual .persistent-deps \
libsodium-dev \
zeromq-dev \
zeromq
RUN git clone https://github.com/mkoppanen/php-zmq /tmp/php-zmq \
&& cd /tmp/php-zmq \
&& phpize \
&& ./configure \
&& make \
&& make install \
&& make test \
&& docker-php-ext-enable zmq

# Cleanup
RUN apk del .build-deps \
&& rm -rf /tmp/* /usr/local/lib/php/doc/* /var/cache/apk/*.

COPY test.php /tmp/test.php

CMD ["php", "/tmp/test.php"]

如何防止阻塞或如何从脚本中终止进程? (我尝试 exec( 'kill 1' ) 失败)

最佳答案

好的,我找到了!

我尝试了在示例中看到的 setSockOpt() ,现在过程结束了。

connect()之前添加:

$socket->setSockOpt(ZMQ::SOCKOPT_LINGER, 30);

http://php.net/manual/en/class.zmq.php#zmq.constants.sockopt-linger

关于php - 基于ZMQContext的$ socket-> send()之后,php进程永不消亡,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50097642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com