假設我有一個有六個后代的虛擬行程。
pstree -pc 101
dummy(101)──dummy(102)──dummy(103)──dummy(104)──dummy(105)──dummy(106)──sleep(107)
如何在 bash 中獲得上述 pid 101 的數字 6?
更新:對于鏈上的產品,我使用下面的 bash 腳本(dummy.sh),這是對同一腳本的遞回呼叫。
#!/bin/bash
if [[ "$#" -ne 1 ]]; then
set -- 7
fi
if [[ "$1" -gt 2 ]]; then
echo 'descendant process' "$1"
"$0" "$(($1 - 1))"
else
sleep 500
fi
注意:我想獲取任何行程的后代數,而不僅僅是上面的示例。以上是由 bash 終端生成的,因此它的 pstree 鏈看起來像pstree -pc 100. 如果我輸入 100 腳本應該回傳 7(因為它有七個后代)
bash(100)──dummy(101)──dummy(102)──dummy(103)──dummy(104)──dummy(105)──dummy(106)──sleep(107)
uj5u.com熱心網友回復:
試試這個(1192 是我的 systemd 行程,替換為您要檢查的行程號):
pstree -pc 1192 | grep -coP '\(\K[^\)] '
顯示的總數包括父行程。做 -1 只得到孩子。
這假設pstree具有類似于以下的格式輸出:
systemd(1)- -ModemManager(814)- -{ModemManager}(828)
| `-{ModemManager}(831)
|-NetworkManager(685)- -{NetworkManager}(787)
| `-{NetworkManager}(791)
|-accounts-daemon(664)- -{accounts-daemon}(682)
| `-{accounts-daemon}(789)
|-acpid(666)
遺憾pstree的是沒有回傳版本號,所以我無法與您的版本進行比較。
uj5u.com熱心網友回復:
我想你正在尋找這樣的東西:
pstree -pcA 101 | awk 'BEGIN { RS="---"; FS="[()]" } FNR==1 { var=$1; n; next } $1==var { n } END { print n }'
[編輯]
適用于不同父母的姓名。
pstree -pcA 29076 | awk 'BEGIN { RS="---"; FS="[()]"; n } FNR==2 { var=$1; n } FNR>2 && $1==var { n } END { print n }'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/428410.html
