killコマンドとは、、、

# 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
```
単体で実行すると、システム内で開かれているすべてのファイルや接続を表示します。