[英]Bash script - how to count processes that have most parents
我們被賦予了在課程中編寫腳本的任務。 我們必須讓腳本找出進程層次結構中哪個進程是“最深的”,類似於“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
如果您的進程連續包含兩個或多個破折號,則可能會出現問題。
當然你可以在“done”后面加上“|sort”來得到最深的進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.