Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

pkill、pgrepが便利すぎて全僕が泣いた

実行中のrailsプロセスを抹殺する場合

  • ps | greprailsを探す*1
  • プロセス番号をコピペ
  • kill -9で爆発四散!

という流れをとっていました。
巷の入門サイトなんかでも、よくある解説ですね。
ですがまぁ……創造的怠惰に手足が生えたようなUNIXハッカーの事、こんな二度手間を許容するわけがないですね。
調べてみたら、案の定あったんです。以上を一発で実現するコマンドが。

pgrep

$ pgrep ruby
79459
$ ps -ax | grep ruby
79459 ??         0:00.00 ruby weatherd.rb
79462 ttys005    0:00.00 grep ruby

ps -ax | grep hoge | grep -v grep をまとめてやってくれる賢い子です。
一度知ったら戻れませんね。

-lオプション

プロセス名が欲しい場合は「-l」オプションをつけて下さい。

$ pgrep -l -f VBox
56123 /Applications/VirtualBox.app/Contents/MacOS/VBoxHeadless --comment ubuntu ...
50567 /Applications/VirtualBox.app/Contents/MacOS/VBoxNetDHCP --network ...
38731 /Applications/VirtualBox.app/Contents/MacOS/VBoxSVC --auto-shutdown
38729 /Applications/VirtualBox.app/Contents/MacOS/VBoxXPCOMIPCD

実に長いプロセス名があったのですが、省略しました。
実際にはちゃと全文でます。

pkill

$ pkill ruby
$ ps -ax | grep ruby
79468 ttys005    0:00.00 grep ruby

pgrep + kill なコマンドです。
念のためお決まりのコマンドで確認しても、ちゃんと消えてます。
ただし、一致したら問答無用でGYAKUSATSUします。
注意して使った方が良いかと。

*1:grep -v grep で重複を消すなんて方法もあるみたいで