Como conhecer o processo PID na máquina linux

0

Estou lançando um instalador do java para instalar um software no linux, quero saber o "id do processo e o nome da imagem" dele.

No Windows eu consigo usando o comando tasklist , mas no linux eu não consegui fazer o mesmo. Eu tentei com os comandos ps -ef e ps -A , mas não está mostrando o nome da imagem ou o PID do processo.

Existe algum comando para obter esses valores?

    
por kgopi 29.03.2013 / 06:32

4 respostas

1

A maioria das distribuições Linux modernas tem o comando pgrep ( process grep ), que foi criado apenas para este propósito. Use assim:

pgrep -lf programname

Ao contrário de ingênuo ps ax | grep programname , pgrep sabe como não exibir o ID do processo de si mesmo.

Há também o utilitário complementar pkill , que pode matar o processo pelo nome (ou enviar outros sinais).

    
por 29.03.2013 / 06:36
0

Experimente ps -aef | grep your_process_name , substitua your_process_name pelo nome do seu instalador.

Espero que isso ajude !!

    
por 29.03.2013 / 06:36
0

Geralmente, é melhor capturar o ID do processo no momento em que você o inicia, em vez de tentar encontrá-lo posteriormente.

Se estiver usando a API C, você obtém o PID do processo gerado como o valor de retorno de fork ou vfork no processo mãe.

Em um shell Bourne derivado, você usa $! imediatamente depois de iniciá-lo.

    
por 29.03.2013 / 07:02
0

Parece que você está procurando uma solução centralizada em Linux em vez de uma solução portátil. No Linux, a maneira fácil, eficiente e confiável de obter as informações que você precisa do Java é usar o sistema de arquivos proc , e especialmente o diretório /proc/self . A página man 5 proc descreve cada arquivo.

O pid é o primeiro campo de /proc/self/stat . O nome da imagem é o segundo.

É muito fácil escrever uma aula para agrupar essas chamadas. Serão apenas algumas linhas de código que fazem IO básico: rápido e robusto. Usar programas de terceiros é mais difícil de acertar e menos eficiente.

Esta solução não é portátil, já que a maioria dos sistemas Unix não possui um sistema de arquivos proc . Você tem quatro opções do melhor para o pior, IMHO:

  • Capture as informações necessárias antes de iniciar o processo: pode ser fácil ou não, dependendo do seu aplicativo
  • Encontre limpo & implementações específicas do sistema, como o sistema de arquivos proc para Linux
  • Use uma API não especificada. RuntimeMXBean.getName() geralmente retorna o pid , você também pode usar a reflexão para obter acesso a java.lang.UnixProcess.pid . A implementação pode diferir entre a JVM e pode mudar a qualquer momento. Soluções aceitáveis se você controlar o ambiente.
  • Escreva código nativo para acessar a API POSIX
  • Use ferramentas externas como ps

Se você decidir confiar em ferramentas externas, deve ter muito cuidado com a portabilidade (as opções e a saída podem diferir muito entre dois sistemas operacionais) e as configurações de localidade.

    
por 31.03.2013 / 16:53

Tags