1--TEST-- 2swoole_process: signal 3--SKIPIF-- 4<?php require __DIR__ . '/../include/skipif.inc'; ?> 5--FILE-- 6<?php 7require __DIR__ . '/../include/bootstrap.php'; 8 9use Swoole\Process; 10 11//父进程中先设置信号 12Process::signal(SIGCHLD, function () 13{ 14 Process::signal(SIGCHLD, null); 15 Process::signal(SIGTERM, null); 16 Swoole\Event::del(STDIN); 17 Swoole\Timer::clearAll(); 18 echo "PARENT WAIT\n"; 19}); 20 21//测试被子进程覆盖信号 22Process::signal(SIGTERM, function () { 23 //释放信号,否则底层会报内存泄漏 24 Process::signal(SIGTERM, null); 25 echo "PARENT SIGTERM\n"; 26 Swoole\Event::exit(); 27}); 28 29$pid = (new Process(function () 30{ 31 Process::signal(SIGTERM, function ($sig) { 32 echo "CHILD SIGTERM\n"; 33 Process::signal(SIGTERM, function ($sig) { 34 echo "CHILD EXIT\n"; 35 Swoole\Event::del(STDIN); 36 }); 37 }); 38 39 //never calback 40 Swoole\Event::add(STDIN, function () {}); 41 42}))->start(); 43 44Swoole\Timer::after(500, function() use ($pid) { 45 Process::kill($pid, SIGTERM); 46 Swoole\Timer::after(500, function() use ($pid) { 47 Process::kill($pid, SIGTERM); 48 }); 49}); 50 51//never calback 52Swoole\Event::add(STDIN, function ($fp) { 53 echo fread($fp, 8192); 54}); 55 56Swoole\Event::wait(); 57?> 58--EXPECT-- 59CHILD SIGTERM 60CHILD EXIT 61PARENT WAIT 62