2017-01-23 59 views
0

我遇到了PHP OCI8模塊的問題。PHP OCI連接忽略SIGINT(ctrl-c)

我有一個PHP工人搬運一些東西,我意識到,一旦有一個開放的OCI連接的PHP腳本忽略任何中斷信號:

<?php 

$db = oci_connect(...); 

while (true) { 
    // do something 
} 

沒有辦法正常停止此腳本。至少我知道。 我曾嘗試使用pcntl_signal()來創建我的自定義信號處理程序,但不會工作。 現在我需要手動殺死進程。

任何人有這個問題或一種方式來處理SIGINT oci?

乾杯!

+0

可能重複:http://stackoverflow.com/questions/17124881/oracle-proc-oci-install-handlers-for -sigsegv-sigabrt-and-friends-why-how-how – ibre5041

回答

0

你可以試試這個代碼:

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

+0

不幸的是,正如我所提到的,自定義信號處理程序不工作:/ –

+0

我確實運行了這個完全代碼,與Oracle 11g數據庫連接,並且工作正常。你有沒有試過這個完全的代碼? –

+0

恕我直言,它最好設置env。在啓動PHP之前,變量DIAG_SIGHANDLER_ENABLED = FALSE。 – ibre5041