Как перечислить PID правнуков целевого PID из скрипта Bash? - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно написать скрипт, который отображает PID всех правнуков процессов, чьи PID указаны в качестве аргумента.

Следующий скрипт отображает внуков процессов, чьи PID указаны в качестве аргумента, но янужны правнуки.

#!/bin/env bash

display_cpid() {
    local depth=$1 pid=$2 child_pid
    (( ++depth ))
    while IFS= read -r child_pid; do
        if (( depth < 2 )); then
            display_cpid "$depth" "$child_pid"
        else
            echo "$child_pid"
        fi
    done < <(pgrep -P "$pid" | xargs)
}

display_cpid 0 "$1"

Я ожидал, что сценарий отображает правнуков, но отображает внуков.

1 Ответ

0 голосов
/ 21 сентября 2019

Условие 'глубина <2' управляет "глубиной" идентификаторов процесса, которые печатаются.Попробуйте напечатать «2» на «3», чтобы напечатать правнуков выбранного процесса. </p>

Примечание: Сценарий не выполняется в Mint-19, рассмотрите модифицированную версию:

#!/bin/bash
display_cpid() {
    local depth=$1 pid=$2 child_pid
    (( ++depth ))
    pgrep -P "$pid" | while read -r child_pid; do
        if (( depth < 3 )); then
            display_cpid "$depth" "$child_pid"
        else
            echo "$child_pid"
        fi
    done 
}

display_cpid 0 "$1"
...