MogLog

メモというか日記というか備忘録というか

pgrep、pkill

pgrep

  • 現在実行中のプロセスからパターンにマッチするプロセスのプロセスIDを標準出力にリストする
  • pgrep [pattern]
  • fオプションでマッチさせる範囲をコマンドライン全体にする
  • lオプションで結果にプロセス名も表示させる
  • uオプションで実行ユーザIDを指定する

使ってみる

以下のようにrubyプロセスが3つ存在したとする。

$ ps aux | grep ruby
vagrant   2461  0.0  0.3  23628  2236 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2462  0.0  0.3  23628  2244 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2463  0.0  0.3  23628  2240 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2465  0.0  0.1   8360   792 pts/0    S+   08:03   0:00 grep ruby

実験

# プロセス名でヒットさせることができる
$ pgrep 'ruby'
2461
2462
2463

# fオプションでマッチ対象をコマンドライン全体にすることができる
$ pgrep 'loop.rb'
$ pgrep -f 'loop.rb'
2461
2462
2463

# lオプションでプロセス名も表示
$ pgrep -fl 'loop.rb'
2461 ruby loop.rb
2462 ruby loop.rb
2463 ruby loop.rb

# uオプションで実行ユーザの指定もできる
$ pgrep -u root 'ruby'
$ pgrep -u vagrant 'ruby'
2461
2462
2463

pkill

  • 名前や各種属性に基づくシグナル送信
  • pgrepとほぼ同じオプションを持つ

使ってみる

以下のようにrubyプロセスが3つ存在したとする。

$ ps aux | grep ruby
vagrant   2461  0.0  0.3  23628  2236 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2462  0.0  0.3  23628  2244 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2463  0.0  0.3  23628  2240 pts/0    S    08:03   0:00 ruby loop.rb
vagrant   2465  0.0  0.1   8360   792 pts/0    S+   08:03   0:00 grep ruby

実験

$ pkill -f 'ruby'
[1]   Terminated              ruby loop.rb
[2]-  Terminated              ruby loop.rb
[3]+  Terminated              ruby loop.rb

# コマンド1つで複数のrubyプロセスを殺すことができている
$ ps aux | grep ruby
vagrant   2474  0.0  0.1   8360   796 pts/0    S+   08:07   0:00 grep ruby

参考