Simplifique o comando no topo

1

Estou usando o seguinte comando para reunir as informações do PID filho:

top -b -n1 -p 719011,719012,719013,719014,719015,719016,719017 | sed -e 's/USER/----/' -e 's/root/----/' -e 's/PR/--/' -e 's/20/--/' -e 's/VIRT/----/' -e 's/538m/----/' -e 's/RES/---/' -e 's/12m/---/' -e 's/SHR/---/' -e 's/1348/----/' -e 's/NI/--/' -e 's/S/-/' | tail -9 > file1

Funciona muito bem, mas é um pouco longo! Eu quero saber se há alguma maneira de reunir as informações apenas usando o pPID? Salvando assim ter que digitar todos os IDs do processo filho. Eu não quero a resposta completa apenas um ponteiro na direção certa para que eu possa descobrir sozinho!

Ok, então eu arrumei o comando para:

ps -o pid= --ppid 719008 | top -b -n4 | awk '{print ,,,}' | tail -9 > file

Mas, em vez de dar a saída para os processos filhos, recebo a saída para cada processo no sistema! O que estou perdendo?

$ pstree -p 719008
dvaudio_server(719008)─┬─{dvaudio_server}(719011)
                       ├─{dvaudio_server}(719012)
                       ├─{dvaudio_server}(719013)
                       ├─{dvaudio_server}(719014)
                       ├─{dvaudio_server}(719015)
                       ├─{dvaudio_server}(719016)
                       └─{dvaudio_server}(719017)

E a saída de pgrep é:

pgrep: option requires an argument -- 'd'
Usage: pgrep [-flvx] [-d DELIM] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
    [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
    
por SimplySimplified 23.08.2017 / 10:42

2 respostas

2

Você pode obter os filhos diretos de um processo usando pgrep :

-P, --parent ppid,...
      Only match processes whose parent process ID is listed.

E:

-d, --delimiter delimiter
      Sets  the  string  used to delimit each process ID in the output
      (by default a newline).  (pgrep only.)

Então:

top ... -p $(pgrep -P <PPID> -d,) | ...
    
por muru 23.08.2017 / 10:48
2

Você pode usar ps para exibir uma lista de processos. Ele entende o argumento --ppid PPIDLIST , que permite filtrar os processos por uma lista separada por vírgula de IDs de processo pai.

Em man ps :

--ppid pidlist

Select by parent process ID. This selects the processes with a parent process ID in pidlist. 
That is, it selects processes that are children of those listed in pidlist. 

Então, provavelmente você deveria tentar algo como

ps aux --ppid 12345
    
por Byte Commander 23.08.2017 / 10:51