如何从Bash脚本中列出目标PID的子孙PID?

时间:2019-06-15 10:52:55

标签: linux bash

编写一个脚本,该脚本显示该进程的所有孙子的PID(以PID作为参数)。

#!/bin/bash

function display_cpid()
{
    child_pids=`pgrep -P $1 | xargs`
    for child_pid in $child_pids;
    do
    echo "$child_pid"
    display_cpid $child_pid
    done
}
display_cpid $1

那是我的工作。它打印以PID为参数的进程的子进程,但我只想打印孙子进程。

1 个答案:

答案 0 :(得分:0)

添加一个“ depth”参数,输入并递归直到其值为2然后打印。如果这还不是您所需要的,那么请编辑您的问题以明确您需要帮助的地方。

#!/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"