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

时间:2019-09-19 01:11:06

标签: linux bash shell scripting pid

我需要编写脚本来显示其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 :(得分:0)

条件“深度<2”控制要打印的过程ID的“深度”。考虑将“ 2”更改为“ 3”以打印所选进程的曾孙。

旁注:该脚本无法在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"