Java 프로그램의 프로세스 이름을 어떻게 설정할 수 있습니까?
이 질문에 이미 답변이 있습니다.
Java 프로그램이 시작되면 시스템 프로세스에서 java라는 이름을 모니터링합니다. 많은 Java 프로그램은 구별하기가 어렵습니다. 따라서 프로세스 모니터에 표시되는 이름을 설정하는 방법이 있으면 좋을 것입니다. 나는 이것이 다른 운영 체제에서 다르게 작동 할 수 있다는 것을 알고 있습니다.
간단한 방법은 자바 인터프리터가 이름을 설정하는 스위치를 지원한다면 다음과 같습니다.
java -processname MyProgram -jar MyProgram
그러나 나는 그러한 스위치를 찾을 수 없으므로 아마도 존재하지 않을 것입니다. 프로세스 이름을 설정하는 Java API도 좋습니다.
그래서 어떤 제안이 있습니까?
이것이 가능한지 모르겠지만 JDK와 함께 제공되는 'jps'라는 명령 줄 도구를 사용할 수 있습니다. * nix ps
와 비슷하지만 Java 프로그램 만 있습니다. jps -v
java에 전달한 모든 인수를 표시합니다.
또한, 사람들 -Dmyprocessname
이 인수에 사용하지 않는 것을 추가하여 자바 프로세스에 "프로세스 이름"을 첨부하는 것을 보았습니다 .
@omerkudat가 말했듯이 :
jps -v
모든 자바 프로세스를 출력합니다 {processID, params list} 매개 변수 목록이 필요한 애플리케이션을 인식하기에 충분하지 않은 경우 실행할 때 더미 매개 변수를 추가해보세요.
java -Dname=myApp -cp myApp.jar some.client.main.MainFrame
다음과 같이 인쇄됩니다.
7780 MainFrame -Dname=myApp
프로세스 ID를 사용하여 종료 / 모니터링 할 수 있습니다.
LD_PRELOAD
shim으로 이것을 할 수 있습니다 : https://github.com/airlift/procname
shim prctl()
은 프로세스가 시작될 때 Linux 전용을 호출 합니다.
static void __attribute__ ((constructor)) procname_init()
{
prctl(PR_SET_NAME, "myname");
}
호출은 메인 스레드에서 발생해야하므로 Java 또는 JVMTI 에이전트에서도이를 수행 할 수 없습니다. 이러한 작업은 다른 스레드에서 발생하기 때문입니다.
이 글을 처음 읽었을 때 프로세스 이름을 변경하는 것이 불가능하다고 생각했습니다. 그러나 sun 포럼의이 오래된 스레드에 따르면 JVM 실행 파일 주위에 C ++ 래퍼를 사용하여이를 달성 할 수 있습니다.
솔직히, 프로세스 이름을 변경하려고 시도하는 것보다 더 표준적인 솔루션이 있다고 생각하므로 실제 문제가 무엇인지 궁금합니다.
가장 좋은 옵션은 launch4j http://launch4j.sourceforge.net/ 과 같은 것입니다.
이에 대해 sun bugtracker에 기록 된 버그가 있지만 우선 순위가 높은 것은 아닙니다. http://bugs.sun.com/view_bug.do?bug_id=6299778
다른 프로세스 이름을 사용하려면 JSmooth 와 같은 것을 사용하여 Java 애플리케이션을 시작하기 위해 자체 바이너리를 만들어야합니다 .
이러한 바이너리 생성에 대한 논의는 이 질문 을 참조하십시오.
주로 두 가지 접근 방식이 있습니다. 하나는 이미 설명한대로 Launch4j, WinRun4J와 같은 도구를 사용하여 네이티브 Windows 시작 관리자를 만듭니다.
더 좋아 보이는 또 다른 접근 방식은 Apache Procrun을 사용하여 Java 애플리케이션을 Windows 서비스로 래핑하는 것입니다. 설치 서비스 프로세스 중에 OurApp.exe와 같은 의미있는 이름을 프로세스에 지정할 수 있습니다.
prunsrv.exe의 이름을 OurApp.exe로 바꾸고 install | start | stop | uninstall 서비스 스크립트의 모든 prunsrv.exe를 MyApp.exe로 바꾸면됩니다.
Apache Procrun을 사용하여 Windows에서 Java 프로그램의 프로세스 이름 변경 에서 자세한 내용을 참조하십시오.
Java 응용 프로그램은 실제로 실행 가능한 것이 아니기 때문에 Java 가상 머신에 의해 실행되기 때문에 Java가 프로세스 모니터에 나타나는 이유는 응용 프로그램의 호스트입니다.
라임 와이어 같은 것들 그러나 할 수 있지만 그의 더 아래로 GCJ에 대한 생각 - http://gcc.gnu.org/java/
참고 URL : https://stackoverflow.com/questions/1057247/how-can-i-set-the-process-name-for-a-java-program
'Development Tip' 카테고리의 다른 글
Side-by-Side 어셈블리를 사용하여 x64 또는 x32 버전의 DLL로드 (0) | 2020.12.08 |
---|---|
Java BigDecimal 성능으로 무엇을 할 수 있습니까? (0) | 2020.12.08 |
Sinatra-API-인증 (0) | 2020.12.08 |
JAXB- "값"속성이 이미 정의되어 있습니다. (0) | 2020.12.08 |
Javascript + Regex = 반복 할 사항 없음 오류? (0) | 2020.12.08 |