como alterar o nome de um processo de aplicação Java?

votos
37

Ao executar um aplicativo Java o nome do processo que lhe é dado é geralmente java.exeou javaw.exe. Mas como eu posso fazer isso ser chamado pelo nome de minha aplicação?

Publicado 19/05/2009 em 14:40
fonte usuário
Em outras línguas...                            


8 respostas

votos
37

Estes métodos são adequados para servidores com um monte de processos Java em execução, e onde você precisa de uma maneira rápida de encontrar a JVM correta (não usando JPS.) Para aplicações, suponho launch4j ou outro invólucro é o caminho a percorrer.

No UNIX, se você está lançando a partir de um sript shell (pelo menos para a festança e possivelmente para outras conchas decentes) você pode usar:

exec -a goodname java ...

para lançar javae passar "goodname" como o argumento 0, que será mostrado como o nome do processo em psetc.

Uma alternativa talvez melhor (que parece funcionar também para top) é criar um link simbólico: ln -s /usr/bin/java /usr/local/bin/kallekula.

Atalhos no Windows não irá fazer o truque, mas o Windows Vista / 7 suporte links simbólicos usando mklink. Isso pode funcionar, mas eu não testei. Eu não tenho certeza se exec -atambém funciona com o bash cygwin no Windows.

Respondeu 19/05/2009 em 16:01
fonte usuário

votos
18

Confira launch4j , é um empacotador executável que permite atribuir nomes executáveis.

Respondeu 19/05/2009 em 14:42
fonte usuário

votos
11

A menos que você lançar Java via JNI em seu próprio personalizado construído executável, o nome do processo será sempre java.exe.

Existem vários lançadores java / invólucros que podem gerar este executável para você.

Respondeu 19/05/2009 em 14:43
fonte usuário

votos
5

Se você estiver usando o Sun JDK, você também pode usar a ferramenta "JPS" linha de comando para obter uma lista detalhada dos processos Java rodando na máquina.

Respondeu 19/05/2009 em 15:52
fonte usuário

votos
3

Isto é específico para o Windows.
Eu estava enfrentando o mesmo problema onde eu tenho que matar o programa java específico usando taskkill . Quando eu executar o programa java, tasklist estava mostrando o mesmo programa com o nome de imagem definida como java.exe . Mas matá-lo usando taskkill / F java.exe irá parar todos os outros que não se pretendia que não é necessária aplicações java.

Então eu executar o mesmo programa java usando:

iniciar "MyProgramName" java java-programa ..

Aqui iniciar comando irá abrir uma nova janela e executar o programa java com o conjunto de título da janela para MyProgramName .

Agora, para matar esta java-programa use o seguinte comando taskkill:

taskkill / fi "MyProgramName"

Seu programa Java será só matou. Descanso não será afetada.

Respondeu 05/12/2013 em 13:16
fonte usuário

votos
3

Assumindo que o que você está realmente depois é uma maneira de terminar a correta o processo correto, mais tarde, em seguida, uma solução alternativa é esta:

Executar ps -ef | grep javae você deve obter uma lista que é algo como isto:

 mruser    7518  7505  4 11:37 pts/3    00:00:00 /usr/bin/java -classpath MRD3030_Linked.jar peralex.MyApp

Em seguida, pkill -f peralex.MyAppvai matar o processo correto.

Respondeu 05/06/2009 em 13:03
fonte usuário

votos
2

Você pode fazer isso com um LD_PRELOADcalço: https://github.com/airlift/procname

O calço simplesmente chama o específica do Linux prctl()quando o processo começa:

static void __attribute__ ((constructor)) procname_init()
{
   prctl(PR_SET_NAME, "myname");
}

A chamada tem que acontecer no segmento principal, por isso não é possível fazer isso a partir de Java ou até mesmo com um agente JVMTI, uma vez que aqueles acontecer em um segmento diferente.

Respondeu 21/02/2016 em 03:09
fonte usuário

votos
2

Nem todos os sabores de exec suporta o sinalizador -a. Se o seu não, o argv0 programa faz algo semelhante.

Respondeu 16/12/2009 em 22:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more