Você precisa entender o básico das expressões regulares para isso. O modificador *
não significa 'qualquer coisa' como é frequentemente assumido. O asterisco tem esse significado no shell, mas isso é algo diferente, não uma regex. *
significa: pegue o caractere anterior (ou grupo de caracteres se precedido por um grupo []
) e tente combiná-lo entre zero e um número ilimitado de ocorrências.
Então, o que você está realmente verificando com myapp_*.jar
é se algum dos itens a seguir está presente na lista de processos:
myapp.jar myapp_.jar myapp__.jar myapp___.jar ...
Veja o que quero dizer? Não corresponde a 'myapp_v.01.jar' de nenhuma forma. Se você quiser combinar qualquer personagem, precisará de .
. Então, seu regex para pkill
poderia ser: myapp_*.*.jar