canaliza um ou mais PIDs do pgrep para o argumento -p do top

0

Eu vi essa boa pergunta:

Passe a saída do anterior comando para o próximo como um argumento

e tentou conseguir o que eu queria, mas sem sorte.

Muitas vezes eu quero assistir ao meu processo maxima / lisp e ao invés de executar o top / htop / etc eu pensei que poderia apenas procurar por "maxima.core" e usar o pid retornado da pesquisa como entrada para o "-p" bandeira para o topo. Se retornar mais de um, não é um grande negócio.

1.) Se eu conheço o PID, posso usar isto:

top -p 10815 -o S -d 0

2.) Para obter o PID (s) eu faço isso:

ps -fu <user> | pgrep -f maxima.core

que gera uma lista como

10814
11989

Mas tentando concatená-los falha para mim. Minhas tentativas centraram-se principalmente em torno disso:

<user>@<user> ~ $ top -o S -d 0 -p $(ps -fu <user> | pgrep -f maxima.core)

Também tentou incorporar os resultados disso: > Como posso obter os parâmetros posicionais, a partir de dois, ou mais geralmente, 'n'?

top -o S -d 0 -p "${(ps -fu <user> | pgrep -f maxima.core)[@]}"

mas reclamou de substituição pobre.

Eu praticamente confio em bash.

    
por nate 12.01.2018 / 05:01

1 resposta

3

Se a sua versão de pgrep suportar a opção -d ( --delimiter ), você poderá usá-la para fornecer uma lista de PIDs separados por vírgula para top :

top -o S -d 0 -p "$(pgrep -d, -u <user> -f maxima.core)"
    
por 12.01.2018 / 05:35