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 -9' などの 'kill' コマンドの数値オプションと同一視できますか? そうでない場合、どのような条件で SIGKILL シグナルが発生しますか? ありがとう!

4

2 に答える 2

5

はい、シグナル 9 は SIGKILL です。kill -l を実行すると、シグナルのリストとその番号を確認できます (man ページsignal(7)にも詳細情報があります)。

しかし、これcaseは無駄です。SIGKILL は、シグナル ハンドラーではキャッチできません (man ページに詳細があります)。したがって、switch ステートメントで使用しても意味がありません。

于 2013-06-03T12:01:45.373 に答える
2

はい、あなたは正しいです。「kill -9」は SIGKILL に相当します。kill man ページから:

「代替シグナルは、-9 -SIGKILL -KILL の 3 つの方法で指定できます。」

また、man 7 シグナルを見ると、次のようになります。

           "SIGKILL       9       Term    Kill signal"

そうです、「kill -9」は SIGKILL シグナルを発します。

于 2013-06-03T11:59:22.533 に答える