- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的 PHP 脚本,我想从终端运行它,并且能够处理信号代码。该脚本创建一个 TCP 服务器并处理连接。不知道为什么,但我无法让信号处理工作:
<?php
declare(ticks = 1);
// Register shutdown command.
pcntl_signal(SIGINT, function ($sig) {
echo 'Exiting with signal: ' . $sig;
global $sock;
global $client;
socket_close($sock);
socket_close($client);
exit(1);
});
$address = '127.0.0.1';
$port = 1234;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($sock, $address, $port) or die('Could not bind to address.');
socket_listen($sock);
while (TRUE) {
$client = socket_accept($sock);
if ($client) {
$input = socket_read($client, 1024000);
socket_write($client, var_export($input, TRUE));
socket_write($client, 'End of data transmission.');
socket_close($client);
}
usleep(100);
}
CTRL+C 不会终止应用程序或点击功能。
如果我删除 pcntl_signal
函数,CTRL+C 会按预期终止程序。
根据我所做的研究,此设置应该有效。我已经在 PHP 5.5 和 5.6 中尝试过...无法按预期工作。
最佳答案
问题
问题是您正在使用执行阻塞 IO 的 socket_read()
。如果 PHP 在阻塞 IO 操作中挂起,则无法处理信号。
解决方案
使用非阻塞IO从套接字中读取数据。您可以在循环中使用带有超时的函数 socket_select()
来确保读取不会阻塞。
关于php - pcntl_signal 函数未被命中,使用套接字时 CTRL+C 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26934216/
我发现了一大块我以前没见过的代码: declare(ticks = 1); pcntl_signal(SIGINT, array($this, "catchSignal")); pcntl_signa
尝试运行 php artisan queue:work 返回此错误: ErrorException : pcntl_signal() has been disabled for security r
这是完整的可重现代码。 =')){ pcntl_signal_dispatch(); console::log("Signal dispatched"); } echo "Runnin
这有点深奥,在我自己查资料并回答之前,这个问题可能没有答案,但这里是: 我是一个简单的 PHP 守护程序库的作者:https://github.com/shaneharter/PHP-Daemon .
让我首先对我拥有的代码进行基本描述。我从一个主要的父进程开始(注意:为了简单起见,我没有展示所有功能。如果您需要我随时扩展,请告诉我): declare(ticks=1); pcntl_signal(
好的,所以我一直在尝试获取 Process Signals使用 PHP 脚本。我遇到了很多我不确定发生了什么的事情,而且我觉得文档没有很好地解释它。 假设我按照 registering signals
我一直在使用 PHP 的 PCNTL extension现在有一段时间了,但无法弄清楚 pcntl_signal() 的 restart_syscalls 参数是什么做。我尝试在 Internet 上
我有一个简单的 PHP 脚本,我想从终端运行它,并且能够处理信号代码。该脚本创建一个 TCP 服务器并处理连接。不知道为什么,但我无法让信号处理工作:
我正在运行一个带有信号处理程序的 PHP 守护进程,以进行有序清理并在不停止的情况下重新配置: declare(ticks = 5); function sig_handler($signo) {
我正在开发一个定期调用后台进程的应用程序。其中一个被 cron 调用,但我正在寻找更强大的东西,所以我将它转换为在 Supervisor 下运行。 (它可能会运行 10 分钟,在此期间它可以检测要执行
我是一名优秀的程序员,十分优秀!