Como posso receber a saída PS com os cabeçalhos no lugar?
Esses dois processos compõem um aplicativo em execução no meu servidor ....
root 17123 16727 0 16:25 pts/6 00:00:00 grep GMC
root 32017 1 83 May03 ? 6-22:01:17 /scripts/GMC/PNetT-5.1-SP1/PNetTNetServer.bin -tempdir /usr/local/GMC/PNetT-5.1-SP1/tmpData -D
não 6-22:01:17
significa que ele foi executado por 6 dias? Estou tentando determinar a duração de quanto tempo o processo está em execução ...
A 2ª coluna é o ID do processo? Então, se eu fizer kill 32017
isso, matará o segundo processo?
ps -e
seleciona todos os processos eps -f
é uma listagem em formato completo que mostra os cabeçalhos das colunas. Em seguida, canalizamos os cabeçalhos das colunas e saímos para egrep, que é estendido para grep, e permite que o canal|
tenha um significado especial, que é OR (esse OR que). Então você acaba combinando o PID nos cabeçalhos das colunas mais as linhas de saída que importam.ps -ef | grep -E 'GMC|PID'
Graças ao geekosaur, eu gostaria de usar este comando para suas demandas, em vez de um comando separado:
O mais complicado é fazer uso do ";" suportado pelo shell para encadear o comando.
fonte
ps -ef
repetiu. o melhor mesmo éps -ef | { head -1 ; grep "your-pattern" ; }
ps -ef | { head -1; grep "pattern" | head -5; }
. Útil se o padrão grep-ed tiver muitos resultados!Segunda coluna é a identificação do processo; A quarta é quando o processo foi criado (geralmente é o momento em que o programa foi iniciado, mas nem sempre; consideram
execve()
e amigos); 6 é a quantidade de tempo de CPU consumida. Portanto, ele está em execução há 8 dias e usou quase 7 dias de tempo de CPU, o que eu consideraria preocupante.Obter o cabeçalho na mesma invocação é complicado, na melhor das hipóteses; Eu apenas faria um separado
ps | head -1
. Você pode considerar o uso deps
métodos de seleção próprios ou algo como, empgrep
vez degrep
, que não é realmente projetado para passar os cabeçalhos.fonte
83
?nice
valor designado pelo usuário ou pelo sistema . Números menores são de maior prioridade. Nesse caso,grep
é a prioridade 0, porque foi bloqueado nas leituras do disco e produziu para gravar sua saída, ePNetTNetServer.bin
é um número grande, porque consome constantemente o tempo de uso sem bloquear. (Agendamento é complexo e os detalhes dependerá do programador exata que está sendo usado.)A solução egrep é simples e útil, mas é claro que você depende do cabeçalho que sempre contém 'PID' (uma suposição mais do que razoável) e a mesma string que não ocorre em nenhum outro lugar. Eu acho que isso é suficiente para as suas necessidades, mas no caso de alguém querer uma alternativa, existe uma solução.
Sed permite que você diga "imprima a primeira linha, depois qualquer linha que contenha o padrão". Por exemplo:
Adicionar
/sed -n/d;
ao filtro:fonte
/sed -n/d
não está certo. Pode ter algum comando existentesed -n
que você deseja imprimir. Truque é usarsed -n '1p; /[P]ROCESS_NAME_TO_SEARCH/p'
. ;-) Observe em[]
torno de qualquer caractere na string de pesquisa.alternativa mais fácil:
ps -ef | { head -1; grep GMC; }
substitua o número pelo número de linhas em que seu cabeçalho é exibido.
fonte
ps -ef | { head -1; grep GMC; }
. Também gosto em uma função como a seguinte: #function pgrep() { ps -ef | { head -1; grep $@; } }
você pode pegar o pid com pgrep
e depois use ps com o pid
ou até combinar os dois em um comando
Isso mostraria apenas a linha desejada e incluiria o cabeçalho.
fonte
Eu escrevi um pequeno programa Perl que imprimirá
Costumo usá-lo com frequência
ps | 1andre GMC
, mas também pode receber argumentos de arquivo (cada arquivo fornece sua própria linha de cabeçalho para correspondências feitas nas linhas desse arquivo).fonte