Conte os processos em execução usando wc e ps

3

Eu tentei usar ps r > log | wc log , mas isso retorna Ambiguous output redirect. . Alguém pode explicar por que e fornecer outra solução?

    
por bluewhile 22.11.2012 / 12:53

3 respostas

5

O símbolo pipe ("|") redireciona a saída de um programa para a entrada de outro.

Você, no entanto, usa ">" para redirecionar a saída de wc para um arquivo chamado log E, ao mesmo tempo, deseja redirecionar a saída para STDIN de wc (que não será usada quando você fornecer um arquivo de entrada para wc ).

Então, você quer um dos seguintes (Dica: a última solução é melhor, pois não cria arquivos extras.)

ps r > log ; wc log

ou

ps r|wc

BTW: você pode querer que wc conte linhas, então wc -l nesse caso.

    
por 22.11.2012 / 13:07
2

Você está misturando redirecionamento e canalização

ps r > log # redirects ps output to a file called log (over writing any contents of log)

O que você quer é

ps r | wc # this connects the output of ps to the input of wc

Se você quisesse usar sua metodologia, precisaria fazer o seguinte

ps r > log; wc log

significando, ps redireciona sua saída para um arquivo chamado log, então o comando wc é executado no arquivo log .

    
por 22.11.2012 / 13:00
2

Usar ps para fazer isso não é confiável - os argumentos de um processo podem conter novas linhas. Uma alternativa melhor no Linux é usar /proc/loadavg da seguinte forma:

awk '{ gsub("[0-9]+/", "") ; print $4 }' /proc/loadavg
    
por 22.11.2012 / 15:55