assistindo a saída de “ps aux | grep blah ”no tmux não funciona?

7

Estou tentando executar isso -      watch "ps aux | grep myShittyProcess" em uma sessão do tmux. Esse processo myShittyProcess também foi iniciado em uma sessão do tmux. O ps aux funciona sem o comando watch. Mas assim que eu o coloco em observação, ele não consegue executar. Como fazer isso funcionar?

- editar -

Descobrimos que redimensionar o tmux em tela cheia faz com que funcione. Algo a ver com ps output wrapping e grep não são capazes de encontrar dentro do contexto envolvido.

    
por Shrinath 25.07.2014 / 13:46

3 respostas

2

Como mencionado na edição da pergunta e na resposta do xzfc , o problema parece estar relacionado à quebra de linha do tmux. Para algo mais próximo de uma substituição imediata de ps aux | grep [q]uote , se você não precisar de informações do usuário, tente:

$ pgrep -af [q]uote
392 bash -c sleep 5 && echo quote
399 bash -c sleep 5 && echo second quote

$ watch pgrep -af [q]uote

O sinal -a faz a saída incluir os argumentos da linha de comando, enquanto -f permite pesquisar os argumentos da linha de comando, bem como apenas o nome do processo.

    
por 29.12.2016 / 19:10
2

ps é um utilitário que produz uma saída legível, e depende de texto legível por humanos, o que é uma má ideia. Você deve usar pgrep myShittyProcess em vez de ps aux | grep myShittyProcess . pgrep produz lista nua de pids e, se você deseja uma saída menos chata, pode passar a saída de pgrep para ps :

ps -opid,user,args -p 'pgrep myShittyProcess'

Para usar esse one-liner com watch , você deve colocá-lo em ' ' (não " " ) para evitar a substituição antecipada do comando shell:

watch 'ps -opid,user,args -p 'pgrep myShittyProcess''
    
por 25.07.2014 / 15:51
2

Executar

watch "COLUMNS= ps aux | grep TheProcessYouWatch"

Explicação: watch define determinadas variáveis de env adicionais, ou seja, COLUMNS e LINES . Isso pode ser facilmente verificado comparando env | grep COLUMNS e watch 'env | grep COLUMNS' .

Quando COLUMNS é definido, ps trunca sua saída para muitos caracteres em uma linha, mesmo que a saída seja canalizada para grep (ou qualquer outra coisa). ( ps , por que você faz isso comigo?). Forçar COLUMNS a ficar vazio dentro do comando watch é suficiente para fazer com que ps funcione como OP (e eu) esperado.

Btw, para evitar que os processos watch e grep façam parte de sua saída assistida, considere adicionar [] da seguinte forma:

watch "COLUMNS= ps aux | grep [T]heProcessYouWatch"

(Claro, eu recomendo familiarizar-se com pgrep também. Outras respostas serão úteis com isso.)

    
por 26.04.2016 / 04:01

Tags