Gazelle
2020年03月18日更新 4568 Views

[Linux]バックグラウンドで起動したプロセスをKillする方法

ターミナルを起動してサーバをフォアグラウンドで起動していると、ターミナルを閉じたタイミングでフォアグラウンドタスクも一緒に殺されてしまい、その後サーバにアクセスができなくなる。

これを防止するためにバックグラウンドプロセスとしてサーバ起動を行うと便利である。Railsのサーバ起動を例に挙げると、次のように起動させることができる。

rails s -d

-dはDaemonの略でありバックグラウンドで起動するという意味である。これを起動させたものの終了のさせ方をどうしたら良いか?というのが今回の趣旨である。

Daemonはバックグラウンドで起動するUnixまたはLinuxのプロセスのことである。他の呼び方としては常駐プログラム。

psコマンドで現在起動しているプロセスを調査

現在起動中のプロセスを調べるコマンドとしてpsコマンドがLinuxには用意されている。man psで調査すると次のように記述されている。

ps - report a snapshot of the current processes (現在起動中プロセスのスナップショットを報告する)

試しにpsコマンドを叩くと次のように出力される。

$ ps
  PID TTY          TIME CMD
21283 pts/0    00:00:00 bash
30562 pts/0    00:00:00 ps

オプションなしの状態で出力されるのはbash(ターミナル)と今叩いたpsコマンドのプロセスだけである。自分自身のbashは殺す事ができないため、もう一つターミナルを起動してそこから21283のプロセスを殺してやる。

kill 21283

これでターミナルを閉じる事ができる。

ps -axuで全てのプロセスを調査

psコマンドだけ打つと、全てのプロセスを表示することができないので、ps -axuオプションにより表示させてやる。

$ ps axu
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...(省略)
apache   30382  0.0  7.9 710672 161964 ?       Sl   Mar10   0:11 Passenger AppPreloader: /var/lib/redmine (forking...)
root     30528  0.0  0.1 124668  2048 ?        Ss   Feb14   0:00 /usr/sbin/abrtd -d -s
root     30556  0.0  0.0 122160   788 ?        Ss   Feb14   0:01 /usr/bin/abrt-watch-log -F BUG: WARNING: at WARNING: CPU: INFO: po
root     30803  0.0  0.0 112920  1228 ?        Ss   Feb14   0:17 /usr/sbin/sshd -D
apache   31800  0.0  0.2 327252  5328 ?        S    Mar13   0:00 /usr/sbin/httpd -DFOREGROUND
yamanaka 32234  0.0  7.5 1513144 154132 ?      Sl   Mar12   0:22 puma 4.3.3 (tcp://0.0.0.0:3000) [/]

USER(プロセスを起動したユーザ)、START(最初に起動した日付)、COMMAND(プロセスが起動した時のコマンド) 等を参考にし、それらしいプロセスに目星をつけていく。

今回の場合、

yamanaka 32234  0.0  7.5 1513144 154132 ?      Sl   Mar12   0:22 puma 4.3.3 (tcp://0.0.0.0:3000) [/]

の部分が該当しそうなので、このPIDに該当するプロセスを殺してやる。

kill 32234

これで再度ブラウザにアクセスして、起動できていなければ成功である。

起動中のプロセスが多すぎて探せない場合

ps auxを実行すると、大量にプロセスが表示されるため時に探すのが困難な場合がある。そんな時は目星をつけてgrepで表示させてやれば良い。例えばapacheのプロセスだけを表示させたい場合には

ps axu | grep apache

としてやれば、その結果のみを取り出すことができて便利である。

関連記事

Railsアプリの独自ドメイン取得からSSL設定まで一貫して行います。環境はCentOS7、サーバはNginx、SSL化には無料のLet's Encryptを使用。
2020年03月18日
さくらVPSでコマンドが何故か重くなった時に、コンソールのCPU使用時間やtopコマンドでのCPU使用率を調査して原因を特定し、不要プロセスを終了させようという話。
2020年04月03日
node用version管理ツールnvmをインストールして、任意のnode versionを使う方法を解説
2020年07月30日
cronがうまく動かせない時はbashファイルの読み込み、実行ユーザ、相対パスの起点について疑ってみると大体動くようになるという話
2020年10月17日
Linuxのsedコマンドを使えば、簡単にファイル内の置換を行うことができる。正規表現のスラッシュ区切りを使わずにバーティカルバーを使って簡潔に書くことも可読性を高めるうえでは重要なテクニックとなる。
2021年07月07日
ホームへ戻る