2018年12月17日月曜日

【Linux】コマンドでの特定プロセスの終了

いつの間にか12月。
もう今年も終わりですか。

なんか目立って今年なんかあったかなーと思いましたが、
割といろいろあったような気がしますね…今年は…。

そんなこんなで、今回はLinuxでの特定プロセスの終了、です。

細々とRaspberryPiやらOrangePiは継続して勉強しており、
そのあたりも含めてちょっと困ったことだったので、これを今回の案にしましょう。





Linuxでプロセスの終了ってのは、コマンドではあるんですよね
killコマンドですね。

sudo kill -9 プロセスID

こんな感じで使えると思います。
ただ、プロセスID指定なのがちょっと問題で、IDが分からないと使えない…
人がコマンド打って使うだけならpsコマンドなりで調べてからなら問題ないんですが、
ツール的に使用したい+内部で動いているプロセスを停止する、という感じで
特定のプロセスをプロセスIDじゃなくてプロセス名で終了させたいんじゃー!
っていう部分がコマンド一つじゃ実現できなかったんですね。

で、Linux不勉強勢の自分はなかなか思い至らなかったんですが、
パイプラインで前の結果を使っていけば実現できる、ということが分かりました。

先ずコマンドを出してしまいましょう。
こんな感じでできました。

ps aux | grep プロセス名 | grep -v grep | awk '{print "sudo kill -9 ", $2}' | sh

パイプラインで、前の実行結果を引き継いで処理をしていく感じですね。
順にちょっとだけ説明してみましょう(自分の理解のためにも…!)
ps aux

では現在の実行中プロセスの一覧が出力されます。
次に実行するコマンドはこの出力結果を引き継いで行います。

grep プロセス名 | grep -v grep

grepで対象のデータから「プロセス名」の存在する列を抽出します。
一つ目のコマンドだけだと自身の「grep プロセス名」も引っかかってしまうので
これを振り落とすために二つ目のコマンドで「grep」の列を外しています。

この結果、狙ったプロセス名の部分だけ抜き出すことが出来るんですね。
で、「所有者」「プロセスID」「メモリ」...といった感じでデータが並んでいるので
「プロセスID」のある2番目を使って、killコマンドを作成します。
awkはまあ、ちょっと勉強中なんですが、こういったgrepからの抽出処理で
よく使うみたいですね。

awk '{print "sudo kill -9 ", $2}'

ここまでで成功していれば「sudo kill -9 ...(なんかのID)」という結果ができるはず。
後はこれをコマンドとして実行するためshコマンドで叩く、という感じ。


とりあえず、この方法でならプロセス名を指定して
プロセスを終了させることが出来ますね!
いろいろ云々やってた時はそのプロセス名までスペルミスしてたんですが…。
なにはともあれ、一つ前進したな!


0 件のコメント:

コメントを投稿