以下のように複数のJavaプロセスが実行されています。
java -jar /my/path/to/app/myapp.jar
java -jar /my/path/to/app/prodapp.jar
java -jar /my/path/to/app/testapp.jar
java -jar /my/path/to/app/myapp_v.01.jar
pkill -f myapp.jar
これで、期待どおりに機能する特定のプロセスを終了できます。正規表現を使用してmyapp_v.01.jarを終了する方法を試しましたpkill -f myapp_*.jar
。この正規表現にはどのような問題がありますか?
私は代替品を探していませんpkill
。正規表現が機能しない理由を知りたいです。
答え1
そのためには正規表現の基本を知る必要があります。この*
修飾語は、よく考えるように「何も」を意味しません。アスタリスクはシェルでこれらの意味を持ちますが、正規表現ではなく異なります。*
意味:前の文字(またはその前に文字セットがある場合は文字セット[]
)を取得し、0から無限大の間の一致を試みます。
したがって、実際に確認したいのは、myapp_*.jar
プロセスリストに次のいずれかがあるかどうかです。
myapp.jar myapp_.jar myapp__.jar myapp___.jar ...
理解しましたか?何らかの方法で「myapp_v.01.jar」と一致しません。どの文字にも一致させるにはが必要です.
。したがって、正規表現はpkill
次のようになります。myapp_*.*.jar