Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxのシグナルとkillコマンド

 Linuxのシグナルとkillコマンド

「新しいLinuxの教科書」を読む会 オンライン #6 での発表資料です。
https://linuxbook.connpass.com/event/192158/

Osumi, Yusuke

October 24, 2020
Tweet

More Decks by Osumi, Yusuke

Other Decks in Technology

Transcript

  1. Linuxのシグナルと
    killコマンド
    @ozuma5119
    1
    「新しいLinuxの教科書」を読む会 オンライン #6 2020/10/24

    View Slide

  2. 新しいLinuxの教科書: Chapter10
    2
    killコマンドは、「プロセスを殺す」コマンドでは無い!
    (確かにそのために使うことは多いが)

    View Slide

  3. 3
    $ man kill
    $ man 2 kill (システムコール)

    View Slide

  4. シグナル (信号) #とは
    4
    プロセス実行....

    View Slide

  5. シグナル (信号) #とは
    5
    プロセス実行....
    びゅん
    SIGTERM(15)

    View Slide

  6. シグナル (信号) #とは
    6
    プロセス実行....
    ガッ
    SIGTERM(15)

    View Slide

  7. シグナル (信号) #とは
    7
    プロセス実行....
    ガッ
    SIGTERM(15)
    突然の割り込み!!

    View Slide

  8. シグナル (信号) #とは
    8
    プロセス実行....
    ガッ
    SIGTERM(15)
    ひとことで プロセスにメッセージを送る
    しくみ プロセス間通信(IPC)
    IPCの他の例:パイプ、UNIXドメインソケット、共
    有メモリ、など
    送るもの メッセージ
    ※実際にはシグナル番号だけ (15など)
    何ができるか 事象発生をプロセスに伝える (ハードウェアエ
    ラー、終了命令、タイマー割込など )

    View Slide

  9. 停止中プロセスがシグナルを
    受け取ると?
    9

    View Slide

  10. $ sleep 100
    Terminated
    $
    10
    $ ps u | grep [s]leep
    ozuma 15631 ... pts/2 S+ 11:47 0:00 sleep 100
    $ kill -TERM 15631

    View Slide

  11. 停止中のプロセスへのシグナルは保留される
    11
    $ sleep 100
    ^Z
    [1]+ Stopped
    sleep 100
    $
    $ ps u | grep [s]leep
    ozuma 15692 ... pts/2 T 11:51 0:00 sleep 100
    $ kill -TERM 15692
    $ ps u | grep [s]leep
    ozuma 15692 ... pts/2 T 11:51 0:00 sleep 100
    15692!? 爆破したはずでは……!?
    Ctrl+Zを押す

    View Slide

  12. 停止中のプロセスへのシグナルは保留される
    12
    $ sleep 100
    ^Z
    [1]+ Stopped
    sleep 100
    $ fg
    sleep 100
    Terminated
    $ ps u | grep [s]leep
    ozuma 15692 ... pts/2 T 11:51 0:00 sleep 100
    $ kill -TERM 15692
    $ ps u | grep [s]leep
    ozuma 15692 ... pts/2 T 11:51 0:00 sleep 100
    フォアグラウンドに戻したら死んだ

    View Slide

  13. 意外とハマることがあるので気をつけましょう
    https://www.gnu.org/software/libc/manual/html_node/Job-Control-Signals.html
    While a process is stopped, no more signals can be delivered to it until it
    is continued, except SIGKILL signals and (obviously) SIGCONT signals.
    The signals are marked as pending, but not delivered until the process is
    continued.
    プロセス停止中(STOP)の状態では、SIGKILLとSIGCONT以外のシグナルは
    保留(pending)となります。実行状態に戻ったとき(continued)、シグナルが配送
    されます。
    13

    View Slide

  14. 正しいプロセスの殺し方
    14

    View Slide

  15. 一般的に、この順が良い(諸説あり)
    1. kill -TERM <プロセスID>
    2. kill -HUP <プロセスID> (再起動だけすることも)
    3. kill -INT <プロセスID> (Ctrl+cに相当)
    4. kill -KILL <プロセスID> (絶対死ぬ)
    15
    ※この他に、止まっているように見えるだけなら kill -CONT も試そう

    View Slide

  16. kill -TERM と kill -KILL の違い (SIGTERM)
    Oct 24, 2020 2:09:35 AM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3012 ms
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["http-bio-8080"]
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol pause
    INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
    Oct 24, 2020 2:09:48 AM org.apache.catalina.core.StandardService stopInternal
    INFO: Stopping service Catalina
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol stop
    INFO: Stopping ProtocolHandler ["http-bio-8080"]
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol stop
    INFO: Stopping ProtocolHandler ["ajp-bio-8009"]
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["http-bio-8080"]
    Oct 24, 2020 2:09:48 AM org.apache.coyote.AbstractProtocol destroy
    INFO: Destroying ProtocolHandler ["ajp-bio-8009"]
    16
    ここで kill -TERM
    キレイに死んだ

    View Slide

  17. kill -TERM と kill -KILL の違い (SIGKILL)
    Oct 24, 2020 2:09:35 AM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 3012 ms
    (何もログ出ない)
    17
    ここで kill -KILL
    汚く死んだ
    (=後始末せずにプロセスが落ちた)
    ● 一時ファイルが残っているかも
    ● ファイルが書きかけかも
    ● ファイルが不整合を起こしているかも

    View Slide

  18. プロセスを殺すときは
    なるたけキレイに殺しましょう
    18
    削除
    削除
    削除......

    View Slide