2017-01-23 1 views
0

Ich habe ein Problem mit dem PHP OCI8-Modul.PHP OCI Verbindung ignoriert SIGINT (Ctrl-C)

Ich habe einen PHP-Arbeiter ein paar Sachen Handling und ich erkennen, sobald es eine offene OCI-Verbindung ist der PHP-Skript jedes Unterbrechungssignal ignoriert:

<?php 

$db = oci_connect(...); 

while (true) { 
    // do something 
} 

gibt es keine Möglichkeit zu graziös dieses Skript zu stoppen. Zumindest weiß ich davon. Ich habe versucht, pcntl_signal() zu verwenden, um meinen benutzerdefinierten Signalhandler zu erstellen, wird aber nicht funktionieren. Jetzt muss ich den Prozess manuell beenden.

Wer dieses Problem hat oder einen Weg SIGINT mit OCI zu behandeln?

Prost!

+0

möglich Duplikat: http://stackoverflow.com/questions/17124881/oracle-proc-oci-install-handlers-for -sigsegv-SIGABRT-and-friends-warum-und-how – ibre5041

Antwort

0

Sie diesen Code versuchen:

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(); 
} 

Mehr hier: http://php.net/manual/en/function.pcntl-signal.php

+0

leider, wie ich bereits erwähnte, Handler benutzerdefiniertes Signal nicht funktionieren entweder:/ –

+0

ich diesen genau Code nicht ausgeführt werden, mit einer Oracle 11g Datenbank verbinden, und es funktioniert. Hast du das genau ausprobiert? –

+0

IMHO ist es besser, env. Variable DIAG_SIGHANDLER_ENABLED = FALSE, bevor PHP gestartet wird. – ibre5041