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"

如果允许 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

如果您的流程连续包含两个或多个破折号,则可能会出现问题。

当然,您可以添加" |排序"之后的"完成"以获得最深入的过程。

相关内容

  • 没有找到相关文章

最新更新