h3pei.tech
お仕事のご依頼
2015-03-14

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

参考

h3pei's icon

h3pei

フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。

Questalという目標達成コミュニティサービスを開発しました。仲間と一緒に目標達成に取り組みたい方はぜひご利用ください。

お仕事のご依頼
GitHubnoteX

関連記事