아래와 같이 여러 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