2016-07-31 22 views
0

Ich versuche Signale im Terminal zu fangen. Ich weiß, dass ich pcntl_signal() Funktion verwenden kann, aber es funktioniert nicht für mich.Laravel Konsole Befehl Fangsignal von Terminal

ich mit diesem Code versuche:

public function handle() { 
    pcntl_signal(SIGINT, function ($signo) { 
     echo "CATCH!\n"; 
     exit; 
    }); 

    while (true) { echo("!\n"); sleep(2); } 
} 

Wenn ich drücken Ctrl+C sehe ich kein Ergebnis, weil Programm noch funktioniert. Was mache ich falsch?

Ich möchte das Programm nach dem Drücken von Ctrl+C stoppen und __destruct() Methode aufrufen.

+0

Schließen Sie 'pcntl_signal (.....);' Unter welchem ​​Betriebssystem befinden Sie sich? –

+0

Können Sie den Code mit dem Code aktualisieren, den Sie gerade ausführen? Der Einfügevorgang führt zu Analysefehlern. –

+0

@IsmailRBOUH @ jedrzej.kurylo Ich vergaß über ');' - meine große Schuld – ventaquil

Antwort

0

Die pcntl_signal() Funktion wird ohne diese Zeile in der Datei nicht:

declare(ticks = 1); 

Es soll wahrscheinlich am Anfang der Datei sein, vor der Klassendefinition.

Ein tick ist ein Ereignis, das regelmäßig während der Programmausführung auftritt, und in diesem Fall löst jedes Häkchen das Programm aus, um die eingehenden Signale zu prüfen. Ich denke. Ich weiß nicht, warum es nicht standardmäßig aktiviert ist, möglicherweise aufgrund erhöhter CPU-Auslastung während des Betriebs?

Ich habe einige Behauptungen gesehen, dass Ticks nach PHP 5.3 veraltet waren, aber ich habe gerade in PHP 7.0.9 getestet und kann bestätigen, dass pcntl_signal() ohne es nicht funktioniert.