使用正则表达式 pkill

使用正则表达式 pkill

我有几个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

相关内容