簡體   English   中英

Bash 腳本 - 如何計算擁有最多父進程的進程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM