comando top-c no linux para filtrar os processos listados com base no nome do processo

top -c

o topo lista todos os processos, existem boas opções para filtrar os processos pelo nome de utilizador, usando a opção-u, mas estou a pensar se há alguma maneira fácil de filtrar os processos com base no nome do processo listado na coluna de comando da saída de topo.

por exemplo, Gostaria que o top-some option-substring do processname e o top displays pids só tivesse este sub-texto no seu nome de comando

Author: alex, 2012-08-22

8 answers

A usar o pgrep para obter o pid das linhas de comando correspondentes:

top -c -p $(pgrep -d',' -f string_to_match_in_cmd_line)

O Top -p espera uma lista separada por vírgulas de pids, por isso usamos -d',' em pgrep. A opção -f no pgrep faz com que corresponda à linha de comandos em vez do nome do programa.

 154
Author: perreal, 2016-05-12 15:11:18

Pode ser feito interactivamente

Depois de executar top -c, Carregue em o e escreva um filtro numa coluna, por exemplo para mostrar linhas onde a coluna de comando contém o texto XPTO, escreva COMMAND=foo

Se você só quer um pouco de saída básica isto pode ser suficiente:

top -bc |grep name_of_process
 78
Author: nos, 2014-06-17 21:30:34

Poderá adicionar filtros a top enquanto estiver em execução, basta carregar na tecla o e depois escrever uma expressão de filtro. Por exemplo, para monitorar todos os processos java use a expressão do filtro COMMAND=java. Poderá adicionar vários filtros se carregar na tecla de novo, poderá filtrar pelo utilizador com a tecla u , e poderá limpar todos os filtros com a tecla= chave.

 50
Author: Don Kirkby, 2016-01-09 01:58:18
O comando do@perreal funciona muito bem! Se te esqueceres, tenta em dois passos...

Exemplo: filtrar o topo para mostrar apenas a aplicação chamada yakuake:

$ pgrep yakuake
1755

$ top -p 1755

Comandos interactivos de topo úteis 'c': comutar o nome completo da localização vs. comando "k": matar por PID "F": filtrar... selecione com setas... em seguida, pressione ' s ' para definir o tipo

A resposta abaixo também é boa... Estava à procura disso hoje, mas não consegui encontrá-lo. Obrigado.

 10
Author: BBW Before Windows, 2014-06-24 02:24:30
Depois de procurar tantas respostas no StackOverflow, não vi uma resposta que se adaptasse às minhas necessidades.

Isto é, para fazer com que o comando top continue a actualizar com a palavra-chave dada, e não temos de CTRL+C / top Uma e outra vez quando novos processos desovam.

Assim, faço um novo... Aqui vai a versão que não precisa de reiniciar.
__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; sleep 1; done;)

Modifica a palavra-chave __e deve funcionar.

2.14.2015 adicionado: Falta a parte relativa à carga de trabalho do sistema com o código acima. Para as pessoas que se preocupam com a parte "média de carga":

__keyword=name_of_process; (while :; do __arg=$(pgrep -d',' -f $__keyword); if [ -z "$__arg" ]; then top -u 65536 -n 1; else top -c -n 1 -p $__arg; fi; uptime; sleep 1; done;)
 7
Author: Val, 2015-02-24 05:44:51
E isto?
top -c -p <PID>
 1
Author: Satish, 2012-08-22 16:32:06

A maioria das respostas falham aqui, quando a lista de processos excede 20 processos. Esse é o limite de Opção top -p. Para aqueles com o Topo mais antigo que não suporta a filtragem com as opções o, aqui está um exemplo programável para obter a saída do ecrã/consola completo (falta informação de resumo nesta saída).

__keyword="YOUR_FILTER" ; ( FILL=""; for i in  $( seq 1 $(stty size|cut -f1 -d" ")); do FILL=$'\n'$FILL; done ;  while :; do HSIZE=$(( $(stty size|cut -f1 -d" ")  - 1 ));  (top -bcn1 | grep "$__keyword"; echo "$FILL" )|head -n$HSIZE; sleep 1;done )

Algumas explicações

__keyword = your grep filter keyword
HSIZE=console height
FILL=new lines to fill the screen if list is shorter than console height
top -bcn1 = batch, full commandline, repeat once
 1
Author: Manwe, 2017-11-21 08:45:30

Acabei por usar um script shell com o seguinte código:

#!/bin/bash

while [ 1 == 1 ]
do
    clear
    ps auxf |grep -ve "grep" |grep -E "MSG[^\ ]*" --color=auto
    sleep 5
done
 0
Author: Jester, 2015-11-10 14:21:12