我们被赋予了一个在课程中编写脚本的任务。我们必须让脚本找出进程层次结构中哪个进程"最深",类似于"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
如果您的流程连续包含两个或多个破折号,则可能会出现问题。
当然,您可以添加" |排序"之后的"完成"以获得最深入的过程。