【问题标题】:PHP OCI connection ignores SIGINT (ctrl-c)PHP OCI 连接忽略 SIGINT (ctrl-c)
【发布时间】:2017-01-23 16:36:59
【问题描述】:

我遇到了 php OCI8 模块的问题。

我有一个 php worker 处理一些东西,我意识到一旦有一个打开的 oci 连接,php 脚本就会忽略任何中断信号:

<?php

$db = oci_connect(...);

while (true) {
    // do something
}

没有办法优雅地停止这个脚本。至少我知道的。 我曾尝试使用pcntl_signal() 创建我的自定义信号处理程序,但不起作用。 现在我需要手动终止该进程。

任何人有这个问题或用 oci 处理 SIGINT 的方法吗?

干杯!

【问题讨论】:

标签: php oracle oracle-call-interface


【解决方案1】:

你可以试试这个代码:

declare(ticks=1); //mandatory
oci_connect(...);

pcntl_signal(SIGINT, 'sig_handler'); //set handler for signal

$i = 0;
while(true) {
    echo $i;
    $i++;
}

//will handle the ctrl+c. Put whatever you want to do
function sig_handler() {
    echo "DIE DIE DIE!";
    die();
}

更多:http://php.net/manual/en/function.pcntl-signal.php

【讨论】:

  • 不幸的是,正如我所提到的,自定义信号处理程序也不起作用:/
  • 我确实运行了这段代码,连接了一个 Oracle 11g 数据库,它工作正常。你试过这个代码吗?
  • 恕我直言,最好设置环境。变量 DIAG_SIGHANDLER_ENABLED=FALSE 在启动 PHP 之前。
  • @FelippeDuarte 好的......在完全运行您提供的代码之后,它确实有效。区别:我有一个空的while循环,而你的有一个回声。有人知道它是如何工作的吗?
  • 在这里与while(true) {} 合作。你能用你实际使用的代码更新你的问题吗? (省略敏感信息)
猜你喜欢
  • 2016-05-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多