⚠️ 記事内に広告を含みます。

プロセスをkillする方法 kill, pkill

プロセスをkillする方法 kill, pkill

killやpkillを使って対象のプロセスを探して停止する方法を紹介します。

killコマンドで不要なプロセスを停止する

プロセスを停止するタイミングは?

プロセスを停止したいタイミング

  • 停止したはずのアプリのプロセスが残っていて気持ち悪い
  • 正常な方法でアプリが停止できない
  • 自作のスクリプトにループ処理があって暴走した

プロセス停止するタイミングは緊急時が多いので慣れておくと有事の際に役立ちます。

プロセスを確認する

停止するプロセスを確認するには以下のコマンドを使います。

  • ps (ps aux, ps -auxwf)
  • top
  • pgrep

プロセス停止で使うのはpsかpgrepだと思います。

Apacheのプロセスを確認してみます。

# ps -auxw | grep -i apache
root      539316  0.0  0.0   7576  4520 ?        Ss   12:30   0:00 /usr/sbin/apache2 -k start
www-data  539317  0.0  0.0 2001280 4648 ?        Sl   12:30   0:00 /usr/sbin/apache2 -k start
www-data  539318  0.0  0.0 2001280 4648 ?        Sl   12:30   0:00 /usr/sbin/apache2 -k start
root      539393  0.0  0.0   6416  1840 pts/0    S+   12:31   0:00 grep --color=auto -i apache

この見方だとgrepしている打ったコマンドのプロセスが見えてしまっているので工夫します

# ps -auxw | grep -i [a]pache
root      539316  0.0  0.0   7576  4520 ?        Ss   12:30   0:00 /usr/sbin/apache2 -k start
www-data  539317  0.0  0.0 2001280 4648 ?        Sl   12:30   0:00 /usr/sbin/apache2 -k start
www-data  539318  0.0  0.0 2001280 4648 ?        Sl   12:30   0:00 /usr/sbin/apache2 -k start

実際に起動しているのは3つのプロセスです。

pgrepを使うとプロセスの名前でマッチしてプロセス番号を返します

・iオプションは大文字小文字を無視する
# pgrep -i apache 
539316
539317
539318


・fオプションはプロセス名以外のコマンドライン全体にマッチする
# pgrep -f apache
539316
539317
539318

プロセスを停止する

プロセスを停止するコマンド

  • kill -9 [プロセス番号]
  • pkill [プロセス名]
  • killall [プロセス名]

落としたいプロセスが3つくらいまでならkilコマンドでやってしまいます。
まずはpsコマンドでプロセスを確認します。

# ps -axw | grep -i [n]ginx
root   ?        Ss   11:40   0:00 nginx: master process nginx
nginx  ?        S    11:40   0:00 nginx: worker process
nginx  ?        S    11:40   0:00 nginx: worker process
nginx  ?        S    11:40   0:00 nginx: worker process
nginx  ?        S    11:40   0:00 nginx: worker process

# for i in {3..7}; do kill -9 53906${i} ; done
 ( kill -9 539063 539064 539065 539066 539067とやっても良い)

# ps -auxw | grep -i [n]ginx

・同じ名前のプロセスが複数上がっているときはkillallを使っても良い
# killall nginx

pgrepでプロセス番号が出るのでそれをwhileでkill -9に渡して停止しても良い

# pgrep -i nginx | while read ps ;do kill -9 ${ps} ; done

大量のプロセス停止はpkillが楽

バグでプロセスが大量に湧いてしまっている時はkillコマンドでやるのは大変なのでpkillを使います。

# pkill -i nginx
# pkill -efi nginx

pgrepで確認してpkillで停止します。

プロセス名でヒットしないプロセスがある場合は-fを入れましょう。
-eでキルしたプロセスを表示・確認できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です