5.3 シグナル

Signals

シグナルはプロセス間通信の一種で、プロセスに対してイベントを通知する。終了、停止、再読込などの制御に使用される。

主要シグナル

番号 名前 説明 キー
1 SIGHUP 端末切断、設定再読込 -
2 SIGINT 割り込み(終了) Ctrl+C
9 SIGKILL 強制終了(キャッチ不可) -
15 SIGTERM 終了要求(デフォルト) -
18 SIGCONT 停止プロセスを再開 -
19 SIGSTOP 停止(キャッチ不可) -
20 SIGTSTP 端末からの停止 Ctrl+Z

シグナル送信

# 番号で指定
kill -9 12345
kill -SIGKILL 12345

# 名前で指定
kill -TERM 12345
kill -HUP 12345

# シグナル一覧
kill -l

# 名前でプロセス終了
killall nginx
pkill -9 python

# 設定再読込(デーモン)
kill -HUP $(cat /var/run/nginx.pid)
systemctl reload nginx  # systemd環境

シグナルの動作

シグナル処理

図1: シグナル受信時の処理フロー

trap(シグナルハンドラ)

#!/bin/bash

# SIGINT (Ctrl+C) をキャッチ
trap 'echo "Interrupted!"; exit 1' SIGINT

# 終了時のクリーンアップ
trap 'rm -f /tmp/myapp.pid' EXIT

# シグナル無視
trap '' SIGTERM

# ハンドラ解除
trap - SIGINT

# 実用例: 一時ファイル削除
cleanup() {
    rm -f "$tmpfile"
    exit
}
trap cleanup EXIT SIGINT SIGTERM

tmpfile=$(mktemp)
# 処理...
出典
[1] man 7 signal - overview of signals.
[2] Bash Reference Manual - Signals.