0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

killコマンドとは、、、

Last updated at Posted at 2024-11-15

killコマンドの紹介

kill process_id

プログラムをデフォルトのSIGTERM(終了)シグナルで終了する方法:
- kill process_id

プロセスに終了するよう丁寧に依頼します。プロセスがこのシグナルを受け取ると、
通常、リソースを解放したり、終了処理を実行したりします。

例えば、データベースプロセスであれば、処理中のトランザクションを完了させた後に終了します。
(プロセス = Linux上で実行中のプログラムのこと)

このコマンドでは、下記の場合プロセスは終了しません。

  • シグナルを無視するようにプログラムが設定されている場合
  • SIGTERMハンドラ内で無限ループや終了しない動作を実装している場合
  • プロセスがフリーズしている場合
    など...

kill -l

利用可能なシグナル名をリスト表示する(SIG接頭辞なしで使用):
- kill -l

シグナルとは?
プロセス間通信やプロセス制御を行うための仕組みです。
シグナルは、特定のイベントが発生したことをプロセスに通知するソフトウェア割り込みの一種です。

例えば、

  • プログラムの終了要求(SIGTERM)
  • 割り込み(SIGINT)
    などがあります。
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2

このコマンドを実行すると、上記のように利用可能なシグナルが表示されます。


kill -1|HUP process_id

SIGHUP(ハングアップ)シグナルを使用してプログラムを終了する。多くのデーモンは終了せずに再読み込みを行う:
- kill -1|HUP process_id

主にプロセスに切断や再起動、設定再読み込みを通知するシグナルです。

多くのデーモン(バックグラウンドで動作するプロセス)は、
SIGHUPを受け取ると終了せずに設定ファイルを再読み込みし、動作を継続します。
この挙動を利用することで、サービスを停止せずに設定の変更を反映させることができます。


kill -2|INT process_id

SIGINT(割り込み)シグナルを使用してプログラムを終了する。通常はユーザーがCtrl + Cを押すことで発生:
- kill -2|INT process_id

プログラムをユーザー操作で中断するためのシグナルです。
通常、Ctrl + C を押すことで、実行中のプログラムに送信されます。
このシグナルは、プログラムに「停止してもいいですか?」という要求を送るものです。

主に、実行中のプロセスを停止するために使用されます。
多くのプログラムは、SIGINTを受け取ると即座に終了します。
プログラムによっては、終了する前に一部のクリーンアップ処理を行います(例: 一時ファイルの削除)。


kill -9|KILL process_id

オペレーティングシステムにプログラムを即時終了するよう指示する(シグナルをキャッチする機会が与えられない):
- kill -9|KILL process_id

オペレーティングシステムがプロセスを即座に終了させるためのシグナルです。(SIGKILL)
このシグナルは、プロセスに処理をキャッチする機会を与えず、無条件で終了させます。

以下のような場合に使用されます

  • プログラムが応答しない(フリーズしている)
  • 他の終了シグナルが無視される(SIGTERM- kill process_id など)
  • 実行中のプロセスを強制的に停止する必要がある

無視不可のシグナルで、プロセスが未保存のデータやクリーンアップ作業を持っている場合でも
実行されず強制終了します。

SIGTERMなどが使用できないときに使用するべきシグナルです。
未保存のデータの喪失やリソースの不整合を引き起こす可能性があります。


kill -17|STOP process_id

オペレーティングシステムにプログラムを一時停止させ、SIGCONT(“continue”)シグナルが受信されるまで待機するよう指示:
- kill -17|STOP process_id

SIGSTOP(シグナル番号17)は、オペレーティングシステムが特定のプロセスを**一時停止(pause)させるためのシグナルです。
プロセスはSIGSTOPを受け取ると直ちに動作を停止し、SIGCONT(シグナル番号18)**を受信するまで待機状態になります。

このシグナルは:

  • 無視できない
  • プログラムに処理を割り込む形で即座に停止させる
    という特徴を持ちます。

kill -SIGUSR1 -group_id

指定したGID(グループID)のすべてのプロセスにSIGUSR1シグナルを送信:
- kill -SIGUSR1 -group_id

このコマンドは、指定したグループID(GID)に関連するすべてのプロセスにシグナルを送信します。


killallコマンド

プロセスIDではなく、プロセス名でも終了させることができるコマンドです。
一致するすべてのプロセスを終了します。

デフォルトでは、終了要求(SIGTERM)を送ります。
-9オプションをつけることで強制終了(SIGKILL)も可能です。

killall java

killall -9 java

プロセスIDを調べる方法

psコマンド

ps aux

実行中のすべてのプロセスを表示できます。


topコマンド

top

リアルタイムで実行中のプロセス情報を表示できます。
CPU使用率やメモリ使用量なども確認可能ー


-lsofコマンド

lsof -i :PORT番号

lsof(List Open Files)は、システム上で開かれているファイルやソケット、
ネットワーク接続、デバイスファイルなどをリスト表示するためのコマンドです。
lsofを使用すると、特定のプロセスやユーザー、ポートなどによって開かれているリソースを調査できます。

-iオプションはネットワーク接続を表示するために使用します。
このオプションを指定すると、TCP/IPソケットを含むネットワーク接続のリストが表示されます。

例えば、kotlinを8080portで起動させている場合

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    75413 user  151u  IPv6 0x82b8b274157a0fc3      0t0  TCP *:http-alt (LISTEN)
  • COMMAND: 実行中のコマンド名(ここでは java)
  • PID: プロセスID(ここでは 75413)
  • USER: プロセスを実行しているユーザー名(ここでは user)
  • FD: ファイルディスクリプタ(ここでは 151u)
  • TYPE: 接続のタイプ(IPv6)
  • DEVICE: デバイス番号
  • SIZE/OFF: オフセットやサイズ
  • NODE: ノード番号
  • NAME: 接続先(ここでは *:http-alt)
lsof

単体で実行すると、システム内で開かれているすべてのファイルや接続を表示します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?