質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

2回答

23445閲覧

pidを調べて,killを行うまでをワンライナーでやるpipeのうまいやり方ありますか?

退会済みユーザー

退会済みユーザー

総合スコア0

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2016/08/12 04:44

編集2016/08/12 04:50

毎度お世話になっております。

今回はshellで停止したいプロセスidをコマンドをgrepして,killを行う方法についていい方法があるかどうか
お聞きしたいです。

現在プロセスをkillする際に

bash

1ps aux | grep -i process 2(出力 processのpid部分を調べる) 3kill -9 ${process_pid}

という2段階のコマンドを打つ方法を取っています。

これをpidを何らかの方法(変数格納など)で取得し,pidを目視せずに
自動でプロセスを停止させるスクリプトを(できればワンライナーで)書きたいと思っています。
processはgrepコマンド自体にマッチするものを含めなければ一意に特定できるという前提です。
いい方法が思い当たる方がいらっしゃればご教授いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

pkill という回答が付いているので、回答でない助言をしておきます。

kill -9 ${process_pid}

一般論としては、プロセスのkillを行うときに無条件で kill -9 を行うのは間違っています。
プロセスは終了時に、終了処理として一時ファイルの削除や、共有メモリの解放などを行う可能性が有ります。kill -9 はそれらの終了処理をスキップしてプロセスを終了させますので、ゴミが残る可能性が有ります。自作プログラムでそういう後処理を行っていないことを知っているのなら良いのですが。
kill -9 は通常のkillでプロセスが終了しない場合(終了処理で何らかの異常があった場合など)に使用します。

ついでに、質問の想定に沿った回答をすると、

Bash

1kill `ps ax | grep process | awk '{print $1}'`

ですね。grepプロセスにもkillシグナルが飛びますが、エラーメッセージが出る以外には悪影響は無いです。grepプロセスを除外したいなら、

Bash

1kill `ps ax | grep pr[o]cess | awk '{print $1}'`

のように検索文字列の一文字を[]で囲んでください。

投稿2016/08/12 13:23

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/15 07:00 編集

正常終了できなくなったプロセスをまとめて消すスクリプトだったので,意図的に-9をつけていました。 []で囲むとプロセス除外できるの初めて知りました。 awkも標準出力で使ったことなかったので勉強になりました。ありがとうございます!
otn

2016/08/15 06:17 編集

>正常終了できなくなったプロセスをまとめて消すスクリプトだったので, なるほど。そうだったんですね。 > この点は,否定の正規表現を使ってるので,除外できるってことですね。 違います。 pr[o]cess は、process という文字列にマッチしますが、grep の引数に process という文字がないのでマッチしません。ということです。
退会済みユーザー

退会済みユーザー

2016/08/15 06:59 編集

あ、なんか^がついてる動作と勘違いしてました。 文字列が含まれていないのにmatchするものがあるように勘違いしていて,マッチした行をよく見たら普通に検索語句が含まれていました。 普通に[]は括弧内のどれかの文字列(正規表現)にマッチでしたね。1文字マッチだから重複がなければ上手くいくということですね。 ありがとうございます!
guest

0

ベストアンサー

grep,kill の方法とは違いますが、pkill を使うのはどうでしょうか。
pkill であれば、プロセス名を指定してkill することができます。
pid を調べる必要はありません。

投稿2016/08/12 04:53

yoshi777

総合スコア674

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/12 04:55 編集

なるほどこんな簡単なコマンドがあったんですね。 勉強不足ですみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問