我有几个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
为此,您需要了解正则表达式的基础知识。该*
修饰语并不像人们通常认为的那样表示“任何东西”。星号在 shell 中具有此含义,但这是不同的,而不是正则表达式。*
意思是:获取前一个字符(或一组字符,如果前面有一[]
组字符)并尝试在零次和无限次出现之间进行匹配。
因此,您实际上要检查的myapp_*.jar
是进程列表中是否存在以下任何一项:
myapp.jar myapp_.jar myapp__.jar myapp___.jar ...
明白了吗?它与“myapp_v.01.jar”无论如何都不匹配。如果你想匹配任何字符,你将需要.
.所以你的正则表达式pkill
可能是:myapp_*.*.jar