Bash脚本 - 如何计算拥有最多父项的进程

时间:2016-05-27 10:26:17

标签: bash

我们被赋予了在课程中编写脚本的任务。我们必须让脚本找出哪个进程在进程层次结构中是“最深的”,比如“pstree”命令,但输出将是“depth_of_process:processes_with_the_depth”。

我已经开始了一些事情,但我无法让它发挥作用。你能看一下并帮助我吗?我还没有开始生成输出,我现在正在研究算法 - 尝试将其变成反向深度优先搜索。如果代码不够自我解释,请告诉我,我会尽力描述它。

#!/bin/bash

PROCS=$(ps -eo "%p %P" | tail -n +2 | sort -nr)


declare -a array
while read -r line; do
    counter=1
    read kid parent
    while read -r otherline; do
        read kid2 parent2
        if [ "$parent" = "$kid2" ]; then
            counter=$((counter+1))
            parent="$parent2"
        fi
    done <<< "$PROCS"
    test=2
    array["$kid"]="$counter"
done <<< "$PROCS"

#for value in "${!array[@]}"; do
#   echo "$value ${array[value]}"
#done
echo "$PROCS"

1 个答案:

答案 0 :(得分:1)

如果允许pstree,我可以提供此功能(感谢@tripleee进行优化):

for processid in $(ps -ax | awk 'NR>1 {print $1}' ); do
    depth=$(pstree -sA $processid | head -n1 | sed -e 's#-+-.*#---foobar#' -e 's#---*#\n#g' -eq | wc -l)
    echo "$depth: $processid"
done

如果您的流程连续包含两个或更多短划线,则可能会出现问题。

当然你可以添加&#34; |排序&#34;完成&#34;完成&#34;获得最深入的流程。