ではbash
、次のことができるはずです。
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
その動作の詳細は次のとおりです。
ps
あなたのすべてのプロセスのリストを与えます。
grep
検索文字列に基づいてフィルタは、[p]
あなたが実際に拾って停止するトリックであるgrep
プロセス自体を。
awk
ちょうどあなたのPIDである各ラインの2番目のフィールドを提供します。
$(x)
実行するための構造手段x
、その出力を取得し、コマンドライン上に置きます。ps
上記の構成内のパイプラインの出力は、プロセスIDのリストなので、次のようなコマンドになりkill 1234 1122 7654
ます。
実際の動作を示すトランスクリプトは次のとおりです。
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
そして、あなたはそれがすべての枕木を終わらせているのを見ることができます。
説明grep '[p]ython csp_build.py'
もう少し詳細にビットを:
あなたがないときsleep 3600 &
に続いてps -ef | grep sleep
、あなたが取得する傾向がある2つのでのプロセスをsleep
、それにsleep 3600
してgrep sleep
(彼らは両方持っているので、sleep
それはロケット科学ではありません、彼らに)。
ただし、でps -ef | grep '[s]leep'
プロセスを作成せずsleep
、代わりにを作成してgrep '[s]leep'
、ここにトリッキーなビットを示します。grep
正規表現「文字クラス[s]
(s
)からの任意の文字とそれに続く」を探しているため、はそれを見つけませんleep
。
言い換えれば、それは探してsleep
いますが、grepプロセスにはgrep '[s]leep'
ありませんsleep
。
これを(SOの誰かが)見せられたとき、私はすぐにそれを使い始めました。
- 追加するよりも1つ少ないプロセス
| grep -v grep
です。そして
- エレガントでこっそり、珍しい組み合わせです:-)