Я использую следующую команду для сбора информации дочернего PID:
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
Это работает просто великолепно, но немного длинно обветренный! Я хочу знать, должен ли там так или иначе собрать информацию только при помощи pPID? Таким образом сохраняя имеющий необходимость ввести каждый идентификатор дочернего процесса. Я не хочу полный ответ просто указатель в правильном направлении, таким образом, я могу изобразить его сам!
Хорошо, таким образом, я убрал команду к:
ps -o pid= --ppid 719008 | top -b -n4 | awk '{print $1,$9,$10,$12}' | tail -9 > file
Но вместо того, чтобы дать вывод для дочерних процессов я получаю вывод для каждого процесса в системе! Что я пропускаю?
$ 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)
И вывод 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]
Можно получить прямые дочерние элементы процесса с помощью pgrep
:
-P, --parent ppid,...
Only match processes whose parent process ID is listed.
И:
-d, --delimiter delimiter
Sets the string used to delimit each process ID in the output
(by default a newline). (pgrep only.)
Так:
top ... -p $(pgrep -P <PPID> -d,) | ...
Можно использовать ps
для отображения списка процессов. Это понимает --ppid PPIDLIST
аргумент, который позволяет Вам фильтровать процессы разделенным запятыми списком идентификаторов родительского процесса.
От 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.
Так, вероятно, необходимо попробовать что-то как
ps aux --ppid 12345