tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

pgrep、pkill使ってプロセス名からのkillするテスト

はじめに

タイトルのとおりですが、pgrepやpkillを使ってプロセス名からkillするメモ。

ちなみに、今まではプロセスを殺す際にこんな感じでやってました

今までの

kill…その1
# ps aux | grep td-agent
root      5041  0.0  0.1 150232  2112 pts/1    S+   16:00   0:00 sudo tail -f td-agent.log
root      5042  0.0  0.0 100940   636 pts/1    S+   16:00   0:00 tail -f td-agent.log
td-agent  7721  0.0  1.1 213068 22256 ?        Sl   16:10   0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log -vv --daemon /var/run/td-agent/td-agent.pid
td-agent  7724  0.3  1.5 234868 30248 ?        Sl   16:10   0:00 /usr/lib64/fluent/ruby/bin/ruby /usr/sbin/td-agent --group td-agent --log /var/log/td-agent/td-agent.log -vv --daemon /var/run/td-agent/td-agent.pid
hoge      7843  0.0  0.0 107460   908 pts/18   S+   16:11   0:00 grep td-agent

と、プロセスIDを目視で調べてからの

# sudo kill -9 7721 7724
もしくは、kill…その2
# ps aux | grep td-agent | egrep -v 'tail|grep' | awk '{print $2}'
7721
7724

と、ちょっとカッコよさげに対象だけを絞り込んで確認してみてからの

# sudo kill -9 `ps aux | grep td-agent | egrep -v 'tail|grep' | awk '{print $2}'`

pgrep、pkill使う

pgrep、pkillを使うとわりと簡単にできます。っていうか知りました

pgrep使ってみる

上記と同じプロセスが起動してるとして

# pgrep -f td-agent
5041
5042
7721
7724

と、pgrepを除いた上でプロセスIDのみ返却してくれます。さらに、オプションの-G(gid指定)を使えばカンペキ

# pgrep -f td-agent -G td-agent
7721
7724

これを使って

sudo kill -9 `pgrep -f td-agent -G td-agent`

と、書くも良し、

pgrep -f td-agent -G td-agent | sudo xargs kill

と書いても良しです。

pkillでヤル

上記でもわりとすっきりですがpkillを使うとさらにすっきりです
オプションはpgrepと同じような引数にされているとのことで

※一応確認してからの
# pgrep -f td-agent -G td-agent
7721
7724

# sudo pkill -f td-agent -G td-agent

# ps aux | grep td-agent
root      5041  0.0  0.1 150232  2112 pts/1    S+   16:00   0:00 sudo tail -f td-agent.log
root      5042  0.0  0.0 100940   636 pts/1    S+   16:00   0:00 tail -f td-agent.log
hoge     13971  0.0  0.0 107460   908 pts/18   S+   16:35   0:00 grep td-agent

かなりすっきり!
こちらを参考にというか、ほぼまるまる参考にさせて頂きました!
pgrep, pkill を使用してプロセスを殺す