我们被赋予了在课程中编写脚本的任务。我们必须让脚本找出哪个进程在进程层次结构中是“最深的”,比如“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"
答案 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;获得最深入的流程。