結論:プロセス名で止める最短手順
プロセス名を指定して停止するには pkill が最もシンプルです。以下は nginx を止める例です。
# プロセス名を指定して SIGTERM を送信(正常終了を要求)
pkill nginx
# 停止を確認(何も表示されなければ停止済み)
pgrep nginx
pgrep nginx が何も返さなければ停止完了です。数秒待っても PID が残っている場合は、後述の強制終了(SIGKILL)に切り替えます。
注意: pkill はデフォルトで部分一致します。たとえば pkill post と打つと postfix も postgresql も同時に止まります。事前に pgrep で対象を絞り込んでから実行するのが実務の鉄則です。
停止前に対象プロセスを確認する
名前だけで止める前に、実際に何が動いているかを確認します。pgrep -a はプロセス名とコマンドライン引数を PID と一緒に表示するため、同名プロセスが複数あるときの判断に役立ちます。
# プロセス名に一致する PID とコマンドラインを表示
pgrep -a nginx
# ユーザー・CPU・メモリも合わせて確認したい場合
ps aux | grep nginx
出力例:
1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
1235 nginx: worker process
1236 nginx: worker process
マスタープロセスとワーカーが混在しているケースでは、pkill nginx が全プロセスに SIGTERM を送ります。マスターが正しくシャットダウンシーケンスを実行するかどうかはサービスの実装次第です。次のセクションで説明する systemctl 経由で止める方が確実です。
systemd で管理されているサービスはこちらが正解
Ubuntu・Debian・Rocky Linux・AlmaLinux など、現代の主要ディストリビューションではサービスは systemd が管理しています。プロセスを直接 pkill で叩くよりも systemctl stop を使う方が安全で、Restart=always 設定との競合も防げます。
# まずサービスが systemd で管理されているか確認
systemctl status nginx
# 正しい停止方法
sudo systemctl stop nginx
# 停止を確認("inactive" が返れば停止済み)
systemctl is-active nginx
ある運用現場では「何度 kill しても nginx が再起動してくる」と困惑するケースがありました。原因は Restart=on-failure の設定で、pkill によるプロセス終了を障害と判断した systemd がすぐに再起動していたものです。systemctl stop はこの再起動ループを回避します。
# 動作中のサービス一覧を確認
systemctl list-units --type=service --state=running
SIGTERM で止まらない場合の強制終了
ハングしたプロセスやシグナルを無視するプロセスには SIGKILL(-9)で強制終了します。ただし SIGKILL はプロセスに後処理の機会を与えません。ファイルの書き込み中であればデータが破損する可能性があるため、必ず最後の手段として使います。
# まず通常の停止(SIGTERM)を試みる
pkill nginx
# 数秒待っても残っている場合のみ強制終了(SIGKILL)
pkill -SIGKILL nginx
シグナルを試す順番は SIGTERM → SIGHUP → SIGKILL が実務上の定石です。SIGHUP は多くのデーモンで「設定の再読み込み」として実装されており、グレースフルな状態遷移につながる場合があります。
# 設定再読み込みで代替できないか試す(nginx・sshd など多くのデーモンに有効)
pkill -HUP nginx
複数の同名プロセスが動いている場合の対処
PostgreSQL のように同名プロセスが複数動くケースでは、特定の PID だけを止めたい場面があります。pgrep で対象を特定してから kill に渡す方法が確実です。
# PID と起動引数を確認
pgrep -a postgres
# 特定の PID にだけ SIGTERM を送る
kill 1234
# 終了を確認("No such process" なら終了済み)
ps -p 1234
スクリプトで同名プロセスを一括停止する場合は、pkill に --exact オプションを付けて完全一致に絞ると意図しない停止を防げます。
# 完全一致で停止("postgres-worker" などは除外)
pkill --exact postgres
# killall も Linux では完全一致がデフォルト
killall postgres
注意: killall は Linux では名前の完全一致ですが、macOS・BSD 系では「全プロセスを終了する」コマンドです。複数の OS をまたいで作業する環境では pkill --exact に統一しておくと安全です。
誤操作を防ぐ:止める前の 3 ステップ確認
本番環境でのプロセス停止は、確認を省いた一発コマンドが重大障害につながります。次の 3 ステップを習慣にしておくと、意図しない停止を防げます。
# ステップ 1:対象プロセスの PID とコマンドラインを確認
pgrep -a <プロセス名>
# ステップ 2:systemd 管理かどうか確認
systemctl status <サービス名>
# ステップ 3:適切な方法で停止
# systemd 管理 → sudo systemctl stop <サービス名>
# それ以外 → pkill --exact <プロセス名>
停止後にプロセスが予期せず再起動してくる場合は、systemctl disable でサービスの自動起動も無効化します。
# 今すぐ停止 + 次回起動後も起動させない
sudo systemctl stop nginx
sudo systemctl disable nginx
「今すぐ止める」だけなら pkill で十分ですが、「次回起動後も起動させない」には systemctl disable が必要です。目的に応じて使い分けることで、意図しない再起動に悩まされずに済みます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
