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