Um script de shell que fornece as informações da CPU [closed]

0

Alguém pode me ajudar a escrever um script de shell que me forneça as seguintes informações:

  • O estado do processo;
  • O tempo que passou no processo na CPU;
  • A memória total usada (em KB);
  • O número do descritor de arquivos aberto;
  • A linha de comando que iniciou o processo; - Pid do processo iniciado por este processo.

Suponha que esteja no formato JSON e tenha esta aparência:

{
    "pid" : 2714,
    "status" : "S",
    "usageCPU" : 1233,
    "usageMemoire" : 404,
    "numFD" : 12,
    "commande line" : "/bin/bash",
    "task" :
        [
            { "pid" : 2714 },
            { "pid" : 4230 }
] }

E mais uma coisa:

Parâmetros de entrada:

Seu programa terá os seguintes parâmetros de entrada: - O pid do processo que gostaríamos da informação. Em suma, para iniciar seu programa, será necessário o comando: ./your_program 2714

Formato de erro

Se você não encontrar as informações necessárias porque o número de pid não está bom, ele retornará a seguinte string: E_PID_NOT_FOUND

P.S sou um fac de matemática, mas tenho que escrever isso e não tenho a menor ideia de como fazer isso.

    
por pokemp 03.12.2014 / 17:32

1 resposta

1

Algo ao longo das linhas de:

name_of_process=$1

ps aux\
 | grep $name_of_process\
 | grep -v "grep"\
 | awk '{print \"{\
     \"pid\" : $2,\
     \"status\" : $8,\
     \"usageCPU\" : $10,\
     \"usageMemoire\" : $4,\
     \"numFD\" : $some_field_num,\
     \"commandline\" : split($NF)[0]\
     \":[{ \"pid\" : $2},{\"pid\" : $some_field_num_too }]}'

Assim, eu chamo ps (com aux flags), que fornece uma lista de todos os processos e seus dados, canaliza a saída disso para grep para obter apenas a linha com o nome do nosso processo, pipe a saída disso em grep novamente desta vez não procurando a frase "grep" (confie em mim, isso é necessário), e finalmente enfileirando os dados (agora apenas uma única linha) no awk.

O Awk divide os dados por colunas (o delimitador padrão é o TAB I) e no awk a sintaxe $ number corresponde a uma coluna dos dados que foram dados.

Para numFD e ppid eu não tinha ideia de quais colunas seriam porque não são impressas por padrão, então talvez verifique os sinalizadores extras de ps (diferente de aux ) e veja quais opções você tem disponíveis.

    
por 03.12.2014 / 17:48

Tags