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. シグナル (信号) #とは 8 プロセス実行.... ガッ SIGTERM(15) ひとことで プロセスにメッセージを送る しくみ

    プロセス間通信(IPC) IPCの他の例:パイプ、UNIXドメインソケット、共 有メモリ、など 送るもの メッセージ ※実際にはシグナル番号だけ (15など) 何ができるか 事象発生をプロセスに伝える (ハードウェアエ ラー、終了命令、タイマー割込など )
  2. $ sleep 100 Terminated $ 10 $ ps u |

    grep [s]leep ozuma 15631 ... pts/2 S+ 11:47 0:00 sleep 100 $ kill -TERM 15631
  3. 停止中のプロセスへのシグナルは保留される 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を押す
  4. 停止中のプロセスへのシグナルは保留される 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 フォアグラウンドに戻したら死んだ
  5. 意外とハマることがあるので気をつけましょう 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
  6. 一般的に、この順が良い(諸説あり) 1. kill -TERM <プロセスID> 2. kill -HUP <プロセスID> (再起動だけすることも)

    3. kill -INT <プロセスID> (Ctrl+cに相当) 4. kill -KILL <プロセスID> (絶対死ぬ) 15 ※この他に、止まっているように見えるだけなら kill -CONT も試そう
  7. 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 キレイに死んだ
  8. 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 汚く死んだ (=後始末せずにプロセスが落ちた) • 一時ファイルが残っているかも • ファイルが書きかけかも • ファイルが不整合を起こしているかも