Como posso encontrar o PID de um processo usando seus argumentos de linha de comando?

2

Estou usando o Mac OS X, o que significa que eu não tenho (por exemplo) pgrep / pkill, mas eu quero algo assim (eu também não uso o macports / fink - homebrew é minha ferramenta de pacote Unix de escolha - para que os pacotes não façam isso).

Eu quero encontrar e matar uma instância de ssh com parâmetros específicos - basicamente, um túnel de encaminhamento de porta ssh remoto específico. O comando que eu usaria é algo assim:

ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt

No entanto, às vezes esse comando grep é exibido na saída, portanto, a sequência de comandos atual não é útil como está escrita.

Existe uma ferramenta para o Mac OS X que eu possa usar para fazer isso?

    
por Chris R 25.05.2011 / 17:58

4 respostas

3

Adicione um grep adicional à string, mas use a opção invert para remover todos os pedidos de saída do grep:

ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt | grep -v grep
    
por 25.05.2011 / 18:02
2

O truque é enganar o grep para não se encontrar.

... | grep "[s]sh" | ...
    
por 25.05.2011 / 18:00
1

Também pode usar o awk:

ps axuwww | awk '!/grep/ && /ssh/ && /remote-host/ && /port-forwarding-stmt/'

Os argumentos 'www' para ps (1) dizem para exibir a linha de comando completa, ao invés de uma versão abreviada.

    
por 25.05.2011 / 18:16
1

ps -a -o pid, command | awk '(/[s]sh/ && /remote-host/ && /port-forwarding-stmt/){ print $1}'

combina algumas das idéias declaradas. A parte -o especifica que apenas imprimimos pid e commandline, e print $1 imprime apenas a parte pid. O [s]sh faz com que ele não se encontre (truque legal!)

    
por 25.05.2011 / 19:44