1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 /** 13 * Runs a PHP script that can be stopped only with a SIGKILL (9) signal for 3 seconds. 14 * 15 * @args duration Run this script with a custom duration 16 * 17 * @example `php NonStopableProcess.php 42` will run the script for 42 seconds 18 */ 19 function handleSignal($signal) 20 { 21 switch ($signal) { 22 case \SIGTERM: 23 $name = 'SIGTERM'; 24 break; 25 case \SIGINT: 26 $name = 'SIGINT'; 27 break; 28 default: 29 $name = $signal.' (unknown)'; 30 break; 31 } 32 33 echo "signal $name\n"; 34 } 35 36 pcntl_signal(\SIGTERM, 'handleSignal'); 37 pcntl_signal(\SIGINT, 'handleSignal'); 38 39 echo 'received '; 40 41 $duration = isset($argv[1]) ? (int) $argv[1] : 3; 42 $start = microtime(true); 43 44 while ($duration > (microtime(true) - $start)) { 45 usleep(10000); 46 pcntl_signal_dispatch(); 47 } 48