Não produz saída quando o processo não existe

1

Eu ficaria feliz se o comando a seguir não gerasse resultado se tail não estivesse em execução:

ps --no-headers $(pidof tail)

Em vez disso, obtenho:

  964 pts/2    00:00:01 bash
 4393 pts/2    00:00:00 ps
    
por Tshepang 24.05.2016 / 14:37

3 respostas

5

Se a sua versão de ps suportar a opção -C :

ps --no-headers -C tail

Se não, você pode executar ps somente se pidof for bem-sucedido:

pid=$(pidof tail) && ps --no-headers ${pid}

ou (para Zsh):

pid=$(pidof tail) && ps --no-headers $=pid

(graças a Gilles !).

    
por 24.05.2016 / 14:46
0

pidof e pgrep são bons comandos para determinar o que está sendo executado em um sistema, mas infelizmente ambos estão indisponíveis em alguns sistemas operacionais. Isso deve funcionar na maioria dos tipos de Unix, BSD e Linux:

ps aux | grep tail | grep -v grep

que remove o próprio comando grep.

    
por 24.05.2016 / 14:46
0

Com pgrep , você pode listar o PID e os comandos, com a entrada vazia de nenhuma correspondência de processo:

pgrep -a tail

Se você quiser mais controle sobre quais campos são exibidos, chame pidof ou pgrep e, em seguida, chame ps apenas se a lista de processos não estiver vazia. Você pode usar uma variável temporária:

pids=$(pgrep -d, tail)
[ -z "$pids" ] || ps --no-headers -p "$pids"

ou ifne de moreutils :

pgrep tail | ifne xargs ps --no-headers
    
por 25.05.2016 / 02:03

Tags