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.