Qual é o caminho mais curto para listar um processo em execução?

1

Muitas vezes preciso verificar se um processo está em execução, então uso um destes:

ps aux | grep myprocess
ps -Fe | grep myprocess
top
pgrep myprocess (only shows the PID)
pkill myprocess (if I want to kill it)

Todos os comandos acima funcionam bem, mas existe um comando mais curto para fazer isso? Qualquer resposta é apreciada, mas o escolhido precisa ser ...

  • Uma solução incorporada, pois trabalho com muitos dispositivos diferentes.
  • Permite usar um padrão.
  • Fornece informações semelhantes a ps aux.
  • Mais curto do que já sabemos.

Obrigado

    
por Katu 19.06.2014 / 11:44

4 respostas

4

Acho que o que você está pedindo não existe, então por que não escrever uma pequena função bash ou script que faça exatamente o que você quer?

function p {
    ps aux | awk -v s="$@" 'NR>1 && ~s'
}

Cole isso em seu ~/.bash_functions (ou seja chamado de ~/.bashrc ) e chame source ~/.bashrc para recarregá-lo e você poderá executar:

$ p firefox
oli       5992 11.2  4.2 2856240 1044104 ?     Sl   Jun17 313:56 /usr/lib/firefox/firefox

A expressão terá um regex que torna isso duplamente útil. E p por conta própria fornecerá uma listagem completa.

    
por Oli 19.06.2014 / 12:21
3

Uso de alias & amp; grep para filtrar seu próprio processo de terminal:

alias qp="ps aux | grep -E -v \"tty.*grep|pts.*grep\" | grep -m1"

Se você quiser o último / mais recente processo:

alias qp="ps ax | tac | grep -E -v \"tty.*grep|pts.*grep\" | grep -m1"
    
por user.dz 19.06.2014 / 12:32
0

Ele fornece o id do processo se estiver em execução e não se não estiver em execução

  

pidof process

    
por Sudheer 20.06.2014 / 06:53
0

As outras respostas são muito boas e basicamente envolvem sua solução ad hoc de ps | grep em um alias ou função do shell. Não há nada de errado com essa abordagem. Observe, no entanto, que isso significa que ps estará extraindo informações para todos os processos em execução e, em seguida, você terá awk ou grep filtrando as linhas de interesse.

Eu sugeriria que é um pouco mais eficiente usar pgrep para obter uma lista de PIDs (como você mostra na sua pergunta) e usar ps para obter o formato de saída desejado apenas para os PIDs correspondidos por pgrep .

Correspondência de processo simples, lista completa do POSIX

pg() {
    pids='pgrep -d, ""'
    [ "$pids" ] && ps -f -p "$pids"
}

pg myprocess

Isso mostra uma listagem ps completa dos nomes dos processos correspondentes. Esta definição de função pode ser adicionada a ~/.bashrc para ser sempre definida no seu shell interativo. Isso também pode ser modificado de algumas maneiras diferentes para alterar o formato de saída ou para corresponder a linhas de comando completas em vez de apenas o nome do processo.

Correspondência de processo simples, lista usuário do estilo BSD

pg() {
    pids='pgrep -d, ""'
    [ "$pids" ] && ps up "$pids"
}

Correspondência de linha de comando completa, lista de controle de trabalho

do estilo BSD
pg() {
    pids='pgrep -f -d, ""'
    [ "$pids" ] && ps jp "$pids"
}

Correspondência de linha de comando completa, lista longa do POSIX

pg() {
    pids='pgrep -f -d, ""'
    [ "$pids" ] && ps -l -p "$pids"
}

Observe a opção -f em pgrep nos dois últimos exemplos para corresponder na linha de comando completa. Você pode alterar esses exemplos para atender às suas necessidades, a parte importante é que a opção p ou -p é fornecida com a lista de PIDs encontrados por pgrep .

    
por Mike Miller 26.06.2014 / 00:04