2015年3月30日月曜日

CentOS7で特定のプロセスを全部消す

お久しぶりでございます。

先日、CentOS7で、ある時間になったら特定のプロセスを全部削除したいというタスクをこなすことになりました。特定のプロセスとは、今回の場合はwgetです。
バックアップ的な理由で毎日wgetをサーバで実行しているのですが、万が一に備えて、朝の業務開始前までに終わっていないプロセスがあったら、それを削除して中断することにしました。

killコマンドで消せることぐらいしか理解できていなかったので、以下のようにpsコマンドでプロセスを探してパイプでつないでkillすることを思いつきました。






するとこんなご指導が。





リプライいただいたように、Linuxにはkillallというありがたいコマンドがあるため、無駄にパイプをつながなくても、 killall プロセス名 で、特定の名前のプロセスをすべて削除できるのでした。

ということで、さっそく実験。しかし、コマンドが無いと言われてしまいました…。

あれ、CentOS7にKillallって無いの…?

こういうのはきっとすでに先人が解決してくれているに違いないと思ってググってみました。


あ、とりあえずデフォでは使えないんですね…?
killallは、psmisc という、プロセスに関するコマンド群の追加パッケージとしてスタメンから左遷されちゃったみたいです。

なので、yum install psmisc をして psmisc をインストールすると使えるようになります。

でもそんなものをインストールしたくなかったり、いろんな理由でインストールが許されない場合はどうするか?
私が思いついたあの長いコマンドを使うという手もあります。
しかし、 pkill というコマンドでも killall のような動作を行わせることができるようなので、そっちのほうが短くて楽かなぁとか思います。



ということで、 pkill -f wget を cron に登録して事なきを得ました。
もっとモダンなタスクスケジュールの仕組みを用意できている場合は、そちらに登録しましょう。


ちなみに、


という点については、systemctl kill は、デーモンにしか使えないため、今回私がkillしたかったwgetプロセスを消すことはできませんでした…。

なので、 pkill を使うのがスマートかもしれません。
 さん、ディスカッションありがとうございました!


0 件のコメント:

コメントを投稿