Cet article présente principalement le traitement du signal du processus PHP, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
<?php while (1) { echo "I am doing something important\n"; echo "If i am interruptted, the data will be corrupted\n"; echo "Be careful\n"; echo "\n\n"; sleep(5); }
. Supposons que nous ayons le script PHP ci-dessus. Nous voulons que le script génère une information et termine le script lorsqu'il reçoit des signaux de processus tels que SIGINT et SIGTERM. Comment y parvenir ?
Utilisez simplement les fonctions pcntl_signal et pcntl_signal_dispatch (notez que PHP doit installer l'extension pcntl pour utiliser ces deux fonctions), voir le code :
<?php/** * 信号ID和信号名称对应关系,没注释掉的信号都是可以通过pcntl_signal函数注册的 */ $GLOBALS['G_SIG_MAP'] = array( 1 => 'SIGHUP', 2 => 'SIGINT', 3 => 'SIGQUIT', 4 => 'SIGILL', 5 => 'SIGTRAP', 6 => 'SIGABRT', 7 => 'SIGEMT', 8 => 'SIGFPE', //9 => 'SIGKILL', 10 => 'SIGBUS', 11 => 'SIGSEGV', 12 => 'SIGSYS', 13 => 'SIGPIPE', 14 => 'SIGALRM', 15 => 'SIGTERM', 16 => 'SIGURG', //17 => 'SIGSTOP', 18 => 'SIGTSTP', 19 => 'SIGCONT', 20 => 'SIGCHLD', 21 => 'SIGTTIN', 22 => 'SIGTTOU', 23 => 'SIGIO', 24 => 'SIGXCPU', 25 => 'SIGXFSZ', 26 => 'SIGVTALRM', 27 => 'SIGPROF', 28 => 'SIGWINCH', 29 => 'SIGINFO', 30 => 'SIGUSR1', 31 => 'SIGUSR2', ); /** * 进程信号处理函数 * @param int $signo 信号ID */function signalHandler($signo) { if (isset($GLOBALS['G_SIG_MAP'][$signo])) { echo "Caught signal {$GLOBALS['G_SIG_MAP'][$signo]}, exit\n"; } else { echo "Caught unknown signal:$signo"; } exit(); }foreach ($GLOBALS['G_SIG_MAP'] as $id => $name) { pcntl_signal($id, 'signalHandler'); }while (1) { echo "I am doing something important\n"; echo "If i am interruptted, the data will be corrupted\n"; echo "Be careful\n"; echo "\n\n"; pcntl_signal_dispatch(); // 此函数调用必须放在循环体内 sleep(5); }
dans le shell Linux Exécutez le script, puis utilisez la commande kill -2 脚本进程ID
pour envoyer un signal au processus. Le script affichera les informations normalement et se terminera.
Recommandations associées :
Explication détaillée de la communication inter-processus PHP
Communication par sémaphore et mémoire partagée basée sur la communication de processus PHP
Contenu lié au verrouillage des processus PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!