[解決済み] bashと正規表現を使って1行でプロセスを検索してkillする
2022-03-14 16:02:56
質問
プログラミング中にプロセスを停止させる必要があることがよくあります。
私が今やっている方法は
[~]$ ps aux | grep 'python csp_build.py'
user 5124 1.0 0.3 214588 13852 pts/4 Sl+ 11:19 0:00 python csp_build.py
user 5373 0.0 0.0 8096 960 pts/6 S+ 11:20 0:00 grep python csp_build.py
[~]$ kill 5124
プロセスIDを自動的に抽出し、同じ行で強制終了するにはどうすればよいですか?
こんな感じで。
[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
解決方法は?
で
bash
ができるはずです。
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
その仕組みの詳細は以下の通りです。
-
は
ps
は、全プロセスのリストを提供します。 -
は、その
grep
は、検索文字列に基づいてフィルタリングします。[p]
を拾わないようにするためのトリックです。grep
の処理そのものです。 -
は
awk
は、各行の2番目のフィールド(PID)を与えるだけです。 -
は、その
$(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
を取得する傾向があります。
に
プロセスで
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
そして - エレガント そして この組み合わせは珍しいですね。)
関連
-
[解決済み] この文字にマッチしない」という意味の正規表現演算子はどれ?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] Bashでlsを使ってディレクトリだけをリストアップする?
-
[解決済み] 正規表現を使用した電話番号の検証方法
-
[解決済み] ファイルからn行目を取得するBashツール
-
[解決済み] Bashでの単一行whileループの構文
-
[解決済み] 複数行の出力をBash変数に取り込む
-
[解決済み] 最初の引数を除くすべての引数を処理する(bashスクリプトの場合)
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] ColdFusion を使用して XML 文字列から余分なホワイトスペースをすべて削除するにはどうすればよいですか?
-
[解決済み] GNU sed の lookahead 正規表現がおかしいのですが?
-
[解決済み] 正規表現の末尾にある中括弧内のカンマ区切りの数字は何を意味するのですか?
-
[解決済み] 正規表現[^ΘdΘs]と[ΘdΘs]の違いは何ですか?
-
[解決済み] RegexにおけるOR条件
-
[解決済み] bashでプロセスを殺す [重複].
-
[解決済み] TCL/EXPECTで$expect_outを使用して変数を割り当てるにはどうすればよいですか?
-
[解決済み] Linuxで、PIDではなく名前でプロセスを強制終了するにはどうしたらいいですか?[重複]する
-
[解決済み】プロセスID(PID)が存在するかどうかを確認する方法