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
参考
<< 前の記事TCPひとめぐり
次の記事 >>YAPC::Asia Tokyo 2015に行ってきた