0

我正在查看这个 PHP 代码来执行信号陷阱:

<?php
/*
SIGTERM for 'kill' default of -15
SIGINT for control-c
*/
    declare(ticks = 1);

    pcntl_signal(SIGTERM, "signal_handler");
    pcntl_signal(SIGINT, "signal_handler");

    function signal_handler($signal) {
        switch($signal) {
            case SIGTERM:
                print "Caught SIGTERM\n";
                exit;
            case SIGKILL:
                print "Caught SIGKILL\n";
                exit;
            case SIGINT:
                print "Caught SIGINT\n";
                exit;
        }
    }

    while(1) {
        //
    }
?>

SIGKILL 是否可以等同于“kill”命令的数字选项,例如“kill -9”?如果不是,什么条件会导致 SIGKILL 信号?谢谢!

4

2 回答 2

5

是的,信号 9 是 SIGKILL。您可以运行 kill -l 并查看带有编号的信号列表(手册页signal(7)也有更多信息)。

然而这case是没有用的。信号处理程序无法捕获 SIGKILL(手册页有详细信息)。因此,将它放在 switch 语句中是没有意义的。

于 2013-06-03T12:01:45.373 回答
2

是的你是对的。“kill -9”将等同于 SIGKILL。从杀死手册页:

“可以通过三种方式指定备用信号:-9 -SIGKILL -KILL。”

另外,如果您查看 man 7 信号:

           "SIGKILL       9       Term    Kill signal"

所以,是的——“kill -9”会发出一个 SIGKILL 信号。

于 2013-06-03T11:59:22.533 回答